C ++ STLコンテナの概念

文字列コンテナ:

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可以通过类数组的方式操作元素。

おすすめ

転載: blog.csdn.net/Gunanhuai/article/details/114640312