C ++入門シーケンシャルコンテナIXノート

  1. シーケンスコンテナの三種類:ベクトル、リスト、両端キュー
    差異:アクセス要素の追加や削除、運用コストの操作に関連する要素。
    ザ・ベクトル:サポート高速ランダムアクセス(で、任意のアクセス、ディスク、テープなど模索する必要性、巻き戻し訪問区別)
    リスト:サポート、迅速な挿入/削除
    両端キュー:両端キュー

アダプター:容器ベースのタイプに対応するために、新しいユーザーインターフェースの定義によって提供元の容器型の動作を
順次容器アダプタ:スタック、キュー、PRIORITY_QUEUE
2. 内蔵型、複合型およびクラス型
ビルトインタイプ:コンパイラ内蔵例えばINT、CHAR、フロート、ダブル、などの基本的なタイプ、 BOOL など;
複合型:定義されたタイプの他のタイプに応じて、いくつかのタイプがある:アレイ、文字列(Cスタイル)、ポインタ、参照、構造(構造体)、連邦(連合);
クラス型:クラス定義とクラス構造体を持ちます。

  1. コンストラクタコンテナの
    パラメータのみ注文コンテナに適用されるコンストラクタは、サイズを取得し、コンテナはこの関連の初期化をサポートしていません。
// 容器类型名C,元素类型T,空容器c
C<T> c;
// 创建容器c2的副本c,c和c2必须容器类型相同、元素类型相同
C c(c2);
vector<int> ivec2(ivec);
// c容器元素为迭代器b和e标示的范围内的副本,左闭后开
C c(b, e);
// n个值为t的元素创建容器c,t的类型必须是容器C的元素类型的值
C c(n, t);
// 创建有n个值初始化元素的容器c
C c(n);
  1. タイプ制約付きコンテナ要素
  1. コンテナの要素型は、以下の2つの制約を満たしている必要があります
    要素型は、代入演算子をサポートする必要があり、オブジェクト要素の種類がコピーされなければなりません。
  2. 参照型に加えて、全てを内蔵し、複合型要素タイプとして使用することができる。参照が一般的な意味で、代入演算子によってサポートされていないため。
  3. それはコピーと割り当てをサポートしていないため、標準IOライブラリの種類(とauto_ptrをタイプ)に加えて、他のすべてのライブラリのタイプは、有効なコンテナ要素タイプです。
  1. コンテナ船
// 对
vector<vector<string> > lines;
// 错,两个尖括号必须中间用空格分开,否则会被认作右移操作符
vector<vector<string> > lines;
  1. リストには、演算関係演算子をサポートしていません。
// list是双向链表结构,不支持算术运算(加法或减法),也不支持关系运算(<=,<,>=,>),它只支持前置和后置的自增、自减运算以及相等(不等)运算.而vector和deque容器的迭代器支持
list<int> ilist(vec.begin(), vec.end());
ilist.begin() + ilist.size()/2;       //错
  1. シーケンシャルコンテナで動作して追加された要素
c.push_bach(t);
// 在c的前端添加值为t的元素,返回void类型.只适用于list和deque,vector不适用
c.push_front(t);
// 在迭代器p所指向元素前面添加值为t的元素,返回指向新添加元素的迭代器
c.insert(p,t);
// 在迭代器p所指向元素前面添加n个值为t的元素,返回void类型
c.insert(p,n,t);
// 在迭代器p所指向元素前面添加由迭代器b和e标记的范围内的元素,返回void
c.insert(p,b,e);
  1. コンテナサイズの操作
// resize操作可能会使迭代器失效,如果resize操作压缩了容器,则指向已删除的元素的迭代器失效.
c.size();
c.empty();
// 返回容器c可容纳的最多元素个数,返回类型为c::size_type
c.max_size();
//调整容器的大小,大小为n,如果n<c.size(),则删除多出的元素,否则,添加值初始化的新元素
c.resize(n);
// 调整容器大小,大小为n,所有新添加的元素值都为t
c.resize(n,t);
  1. 要素へのアクセス
// 返回容器c的最后一个元素的引用
c.back();
// 返回容器c的第一个元素的引用
c.front();
// 返回下标为n的元素的引用,如果n<0或n>=c.size(),则该操作未定义,运行错误
c[n];
// 返回下标为n的元素的引用,如果n<0或n>=c.size(),则该操作未定义,抛出out_of_range异常
c.at(n);
  1. 要素を削除します
// 删除迭代器p所指向的元素,返回被删除元素后面的元素,如果p指向最后一个元素,则返回最后一个元素的下一个位置,如果p指向最后一个元素的下一个位置,则该函数未定义
c.erase(p);
// 删除迭代器b和e所标记范围内的所有元素(不包括e指向的元素),返回一个迭代器,指向被删除元素段后面的元素,如果e指向最后一个元素的下一个位置,则返回的迭代器也指向最后一个元素的下一个位置
c.erase(b,e);
// 删除容器内的所有元素,返回void
c.clear();
// 删除容器的最后一个元素,返回void,如果c未空容器,则该函数未定义
c.pop_back();
// 删除容器的第一个元素,返回void,如果c未空容器,则该函数未定义,只适用于list和deque容器(这两个都是基于链表实现的),删除并不是vector的强项,它的作用是随机存取,如果删除第一个元素,则应该后面的所有元素的下标位-1,即c[1]编程c[0],对于随机存取来说,太过繁琐.
c.pop_front();
//erase、pop_front和pop_bach函数使指向被删除元素的所有迭代器失效,对于vector容器,指向删除点后面的元素的迭代器通常也失效,而对于deque容器,如果删除时不包括第一个元素或者最后一个元素,那么该deque容器相关的所有迭代器都会失效.
  1. 割り当てとスワップ
    異なる(または同じ)容器のタイプ、異なる要素タイプが、互換性の場合、容器のタイプ及びコンテナ要素が同じタイプを有する場合、その代入演算子は、=機能を割り当てるが、代入演算子を使用してはなりません、演算子は=コピーを使用することができます。
// 删除容器c1中的所有元素,然后将c2的元素复制给c1,c1和c2的容器类型和容器元素类型必须相同
c1 = c2;
// 容器c1中存放的是容器c2的元素,容器c2中存放的是原来容器c1的元素,该函数的执行速度(常量时间)比复制操作快.迭代器不会失效,原来的迭代器还是指向原来的元素.
c1.swap(c2);
// 重新设置c的元素,将迭代器b和e标记的范围内的所有元素复制到c中,b和e必须不是指向c中元素的迭代器,左操作数迭代器失效.
c.assign(b,e);
// 将容器c重新设置为存储n个值为t的元素,左操作数迭代器失效.
c.assign(n,t);
  1. 成長ベクトルコンテナので、
  1. サポートベクトル容器高速ランダムアクセス、連続的に容器の記憶素子に、すなわち、各要素は直前の要素が格納されます。
  2. あなたはコンテナに要素を追加すると、新しい要素のための余地がない場合、ベクトルは再割り当てられたストレージスペースでなければならないコンテナは、元の要素と新しい要素を追加することを格納するために使用される、古いストレージスペースに保存されている要素は、コピーすることができます新しい収納スペースにし、新しい要素を挿入し、最終的に古いストレージスペースを撤回。
  3. 高速ベクトルのメモリ割り当てを達成するために、現在必要ないくつかのより多くのスペースよりも、実際に割り当てられた容量
  1. 容量と予備メンバー
    容量の操作は保存することができますより多くのストレージスペースを割り当てる必要の前に、コンテナ内の要素の合計数を取得します。サイズは、コンテナ、現在所有している。内の要素の数である
    ベクトルコンテナの多くの要素が確保されるべき方法を伝えるために予備動作収納スペース。
ivec.reserve(50);
// 50
ivec.capacity();
  1. コンテナの選択
  1. ベクターおよび両端キュー容器は、容器、テール挿入および欠失のコストよりコンテナー以上の任意の位置において、挿入又は削除の要素のコスト(シフトが必要)要素への高速ランダムアクセスを提供します。
  2. 任意の場所にリストタイプを迅速オーバーヘッドの大きなランダムアクセス要素を犠牲にして、挿入および除去することができます。
  3. 両端キュー両端キュー連続線形空間は、頭部と尾部の端部における双方向開口部を効率的に挿入し、両端キューに、要素を除去し、ベクターは界面に非常に類似していることが可能です。
  • ベクター容器、容器両端キュー挿入および消去効率下部要素と同様
  • ベクターとは異なり、両端キュー容器は、容器の尾のように、そのヘッダ内の効率的な挿入操作の実施および消去を提供します
  • ベクトルコンテナとコンテナと同じように、すべての要素へのランダムアクセスをサポートして両端キューコンテナリストは異なっています
  • 第1の部分およびテール部分内の任意の反復は失敗することはないコンテナ両端キュー要素に挿入され、ヘッダまたは尾除去要素のみ反復子が挿入及び欠失容器両端キューを作成する任意の他の場所で失敗削除要素を指します要素は、コンテナすべてのイテレータの障害を指します。
  1. 文字列オブジェクトの構築方法
// 创建一个string对象,它被初始化为cp所指向数组的前n个元素的副本
string s(cp, n)
// 创建一个string对象,它被初始化为一个已存在的string对象s2中从下标pos2开始的字符的副本,如果pos2>s2.size(),则该操作未定义
string s(s2, pos2)
// 创建一个string对象,它被初始化为一个已存在的string对象s2中从下标pos2开始的len2个字符的副本,如果pos2>s2.size(),则该操作未定义
string s(s2, pos2, len2);

string s1;
// "aaaaa", 注意与string s(s2, pos2)的区别
string s2(5, 'a');
string s3(s2);
// "aa"
string s4(s3.begin(), s3.begin() + s3.size() / 2);
  1. いくつかのオペレーティング・文字列型別のコンテナタイプ
// insert、assign、erase等操作与vector等容器基本相同
// 返回从字符串s中从pos位置开始n个字符的字符串
s.substr(pos,n);
// 返回从字符串s中从pos位置开始直到结束位置的字符串
s.substr(pos);
// 返回s的副本
s.substr();

s.append(args);
// 删除s中从pos位置开始的len个字符,用args指定的字符替换之,返回s的引用,args不能是b2,e2
s.replace(pos,len,args);
// 删除迭代器b到e范围内的所有字符,用args替换之,返回s的引用,args不能是s2,pos2,len2
s.replace(b,e,args)

操作的参数args:
s2                     // 字符串s2
s2, pos2, len2         // 字符串s2中从下标pos2开始的len2个字符
cp                     // 指针cp指向的以空字符结束的数组   
cp, len2               // 指针cp指向的以空字符结束的数组中前len2个字符
n, c                   // 字符c的前n个副本
b2, e2                 // 迭代器b2和e2标记的范围内所有字符

// 在s中查找args的第一次出现
s.find(args);
// 在s中查找args的最后一次出现
s.rfind(args);
// 在s中查找args的任意字符的第一次出现
s.find_first_of(args);
// 在s中查找args的任意字符的最后一次出现
s.find_last_of(args);
// 在s中查找第一个不属于args的字符
s.find_first_not_of(args);
// 在s中查找最后一个不属于args的字符
s.find_last_not_of(args);

操作的参数args:
c, pos   //在s中,从下标pos开始查找字符c,pos默认0
s2, pos  // 在s中,从下标pos开始查找string对象s2,pos默认0
cp, pos  // 在s中,从下标pos开始查找指针cp所指向的C风格的以空字符结束的字符串,pos的默认值为0 
cp, pos, n  // 在s中,从下标pos开始查找指针cp所指向的数组的前n个字符,pos和n都没有默认值

// 比较s和s2
s.compare(s2);
// 让s中从pos1下标开始的n1个字符与s2比较
s.compare(pos1, n1, s2);
// 让s中从pos1下标开始的n1个字符与s2中从pos2开始的n2个字符比较
s.compare(pos1, n1, s2, pos2, n2);
// 比较s和指针cp所指向的C风格的以空字符结束的字符串
s.compare(cp);
// 比较s中从pos1下标开始的n1个字符和指针cp所指向的C风格的以空字符结束的字符串
s.compare(pos1, n1, cp);
// 比较s中从pos1下标开始的n1个字符和指针cp所指向的C风格的以空字符结束的字符串的前n2个字符
s.compare(pos1, n1, cp, n2);
  1. コンテナアダプタ
    アダプタは作ることです..キュー、PRIORITY_QUEUEアダプタとアダプタが標準スタックライブラリ一般的な概念である、本質的アダプタコンテナアダプタ、アダプタと反復機能が含まれています。注文コンテナのほかには、ライブラリーはまた、3つの連続したコンテナアダプタを提供します物事のアクションの動作と同様のメカニズムは、他のものは、コンテナアダプタの使用に仕事抽象的な方法の異なるタイプを既存のコンテナの種類は、例えば、スタックアダプタは、コンテナのいずれかの種類を注文することができますように両端キューコンテナに基づいて作業し、デフォルトのスタックとキューのスタックのように、ベクトルコンテナに基づいてPRIORITY_QUEUE。
公開された89元の記事 ウォンの賞賛0 ビュー1019

おすすめ

転載: blog.csdn.net/qq_26496077/article/details/104098818