内容摘录自《C++标准库》
目录
Array
一系列元素,有着固定的大小,只允许替换元素值,不可以增加或者移除元素而改变其大小;
有序集合(固定序列),允许随机访问(迭代器属于随机访问迭代器),即常量时间内访问任何元素,前提是你知道元素位置;
唯一一个无任何东西呗指定为初始值时,会被预初始化的容器。初值可能不明确,而不是0;
array是聚合体,意味着,用来保存所有元素的那个成员是Public;
swap():置换后,iterator和reference指向原本容器,但指向不同的元素;
at()执行“范围检查”,如果索引逾越范围,at()会抛出一个out_of_range异常;
Vector
vector是将元素置于dynamic array中加以管理的一个抽象概念;
有序集合,随机访问,如果在末端附加或者删除元素,vector的效率相当好;
vector优异的效率,是因为分配出“较其容纳的元素”更多的内存;
如果超过vector实际能够容纳的元素量,vector就会需要重新分配内部内存。一旦内存重新分配,vector元素相关的reference,pointer,iterator都会失效,而且内存分配很耗时间;
Deque
deque(发音"deck")和vector非常相似,采用dynamic array来管理元素,提供随机访问,有着和vector几乎一模一样的接口。不同的是能在头尾两端进行快速安插和删除。(vector只能在末端)
Deque不提供容量操作;直接提供函数完成头部元素的安插和删除
元素的插入或删除会导致内存重新分配。在头部或尾部插入元素,pointer和reference仍然有效
List
使用一个doubly linked list(双向串列)管理元素;
list对象自身提供了两个pointer或称anchor,用来指向第一个和最后一个元素。每个元素都有pointer指向前一个后下一个元素;
list不支持随机访问。任何位置上执行元素的安插和移除都非常快,始终都是常量时间内完成;
Forward List
以singly linked list管理元素
观念上,forward list是一个行为受限的list,但优点是内存用量较少,行动也略快速;
相对于list,forward list有以下的约束:只有前向迭代器,也不支持反向;没有size();没有指向最末元素的锚点;
set和Multiset
set和multiset会根据特定的排序准则,自动将元素排序。两者不同之处在于multiset允许元素重复而set不允许;
set和multiset通常以平衡二叉树完成;
自动排序的主要优点在于令二叉于查找元素拥有良好的效能;
自动排序的一个重要限制,不能直接改变元素值,因为会打乱原本正确的顺序;
Map和Multimap
Map和multimap将key/value pair当做元素进行管理,根据key的排序准则自动为元素排序。multimap允许重复元素,map不允许;
所有元素的key都被视为常量;
无序容器
以hash table为基础的容器,其内元素没有清晰的次序。可以把容器想象成一个袋子;
随机的次序访问元素;
其他STL容器
各种容器的使用时机