容器
文字列コンテナ:
string其实相当于一个保存字符的序列容器,因此除了有字符串的一些常用操作以外,还有包含了所有的序列容器的操作。字符串的常用操作包括:增加、删除、修改、查找比较、链接、输入、输出等
ベクトルコンテナ:ベクトル
は、動的サイズ配列をカプセル化するシーケンシャルコンテナであり、あらゆるタイプの動的配列を格納できます。
物理アドレスと論理アドレスは連続しているため、高速アクセス(最初のアドレス+ i直接アクセス)を実現できます。
1)可以直接访问任何元素。
2)线性顺序结构。可以指定一块连续的空间,也可以不预先指定大小,空间可自动扩展,也可以像数组一样被操作,即支持[ ]操作符和vector.at(),因此可看做动态数组,通常体现在追加数据push_back()和删除末尾数据pop_back()。
3)当分配空间不够时,vector会申请一块更大的内存块(以2的倍数增长),然后将原来的数据拷贝到新内存块中并将原内存块中的对象销毁,最后释放原来的内存空间。因此如果vector保存的数据量很大时会很消耗性能,因此在预先知道它大小时性能最优。
4)节省空间。因为它是连续存储,在存储数据的区域是没有浪费的,但实际上大多数时候是存不满的,因此实际上未存储的区域是浪费的。
5)在内部进行插入和删除的操作效率低。由于vector内部按顺序表结构设计,因此这样的操作基本上是被禁止的,它被设计成只能在后端进行追加和删除操作。
ベクトルと配列の違い:
1.配列は手動でのみ展開でき、ベクトルは自動的に展開できます
2.配列がデータを挿入した後、データを後方に移動する必要があり、ベクトルは任意の位置に挿入できます
機能の意味:
1.push_backは配列の最後にデータを追加します
2.pop_backは配列の最後のデータを削除します
3.at番号付きの位置のデータを取得します
4.配列ヘッドのポインタの取得を開始します
5.endは配列の最後の要素のポインタを取得します+1
6。frontはアレイヘッドへの参照を取得します
7.backを使用して、配列の最後の要素への参照を取得します
8.max_sizeは最大ベクトルサイズを取得します
9.capacity現在のベクトル割り当てのサイズ
10.size現在使用されているデータのサイズ
11.resizeは現在使用されているデータのサイズを変更します。現在使用されているデータよりも大きい場合は、デフォルト値が入力されます
12.reserveは現在のvecotrによって割り当てられたスペースのサイズを変更します
13.ポインタが指すデータ項目を消去削除します
14.clear現在のベクトルをクリアします
15.rbeginは、ベクトルが反転された後に開始ポインターを返します(実際、これは元のend-1です)
16.rendはベクトル逆構造の終了ポインターを返します(実際には、元のbegin-1)
17.emptyベクトルが空かどうかを判断する
18.交換データを別のベクターと交換する
dequeコンテナ:deque
1)是一种优化了的、对序列两端进行添加和删除操作、较快速地随机访问的基本序列容器。
2)采用多个连续的存储块保存对象,并在一个映射结构中保存对这些块及其顺序的跟踪。由于不需要重新分配空间,因此追加元素时比vector更有效。实际上内部有一个map指针。
3)支持随机访问,即支持[ ]操作符和.at(),但性能不如vector。
4)可以进行内部随机插入和删除,但性能不如list。
リストコンテナ:二重リンクリスト
1)线性链表结构。
2)其数据由若干个节点构成,每个节点包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。无需分配指定的内存大小且可任意伸缩,因此它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。因而相比vector它也占更多的内存。
3)根据其结构可知随机检索的性能很差,vector是直接找到元素的地址,而它需要从头开始按顺序依次查找,因此检索靠后的元素时非常耗时。即不支持[ ]操作符和.at()。
4)由于list每个节点保存着它在链表中的位置,插入或删除一个元素仅对最多三个元素有所影响,因此它可以迅速在任何节点进行插入和删除操作。
連想コンテナセット、マルチセット、マップ、マルチマップ
連想コンテナは二分木構造であり、要素の特性に従ってソートされ、イテレータは要素の特性に従って「順次」要素を取得できます。キー値の形式でデータを保存します。つまり、保存するキーワードと値を関連付けますが、シーケンシャルコンテナは1つのタイプしか保存できません(キーワードのみを保存するか、値のみを保存できると見なすことができます)基礎となる実装は赤黒木です。
コレクションセット:
1)快速查找,不允许重复值。
2)按一定顺序排列,集合中的每个元素被称作集合中的实例。
3)内部通过链表的方式组织,因此插入的时候比vector快,但在查找和末尾追加比vector慢。
地図:
1)提供一种“键-值”关系的一对一的数据存储能力。键按一定顺序排列且不可重复(set也可以看成没有键只有值的特殊map形式)。
2)链表方式存储,继承了链表的优缺点。
3)一对多映射,基于关键字快速查找。
マルチセット和マルチマップ:
要素は一意である必要はありません。その他は上記と同じです。
連想コンテナの機能:
1)红黑树的结构原理。
2)set和map保证了元素的唯一性,mulset和mulmap扩展了这一属性,可以允许元素不唯一。
3)元素是有序的集合,默认在插入的时候按升序排列。
4)插入和删除操作比vector快,比list慢。因为vector是顺序存储,而关联容器是链式存储;而同为链式结构,list是线性,而关联容器是排序的二叉树结构,因此每次都需要对元素重新排序,涉及到的元素变动更多。
5)对元素的检索操作比vector慢,比list快很多。vector是顺序的连续存储,这是最快的速度;而list需要逐个搜索,搜索时间与容器大小成正比,关联容器查找的复杂度log(n),因此容器越大,关联容器相对list越能体现其优越性。
6)在使用上set区别于顺序容器的是查询上虽然慢于vector,但却强于list。
7)在使用上map的功能是不可取代的,它保存了“键-值”关系的数据,而这种键值关系采用了类数组的方式。数组是用数字类型的下标来索引元素的位置,而map是用字符型关键字来索引元素的位置。在使用上map也提供了一种类数组操作的方式,即它可以通过下标来检索数据。在STL中只有vector和map可以通过类数组的方式操作元素。