c++标准库中的容器

内容摘录自《C++标准库》

目录

Array

Vector

Deque

List

Forward List

set和Multiset

Map和Multimap

无序容器

其他STL容器

各种容器的使用时机




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容器

各种容器的使用时机

猜你喜欢

转载自blog.csdn.net/qq_27931977/article/details/82984978