STL里的容器按元素在容器内的排序方式,分序列式和关联式。
C++中的array就是一个序列式容器,其中的元素集合呈线性关系。
STL中的序列式容器:<vector> <list> <deque> <stack> <queue> <priority_queue>等。其中stack和queue在技术上称之为适配器,即内部机制采用其他容器实现。
1.Vector
特征:类似数组,但可以空间大小自动随元素的数量改变。
vector的迭代器:由于其使用的是连续线性的空间,所以其迭代器实际就是原生指针,且为 Random Acccess Iterator.
注意:插入、删除操作会造成原有迭代器的失效。
2.List
特征:内存开销小适用广,因为是一个带头结点的环状双向链表,所以对任何位置的插入或删除需要的时间为常数(随数据规模增大)
list的迭代器:使用特定的iterator类,其为Bidirectional Iterator
注意:list不能使用STL提供的通用sort算法。因为sort算法只接受Random Access Iterator,所以提供了自己的sort算法。
3.Deque(双向队列)
特征:没有容量的概念,因为它是以分段的连续空间组合而成,随时可以增加一段空间拼接起来。
deque的迭代器:提供Random Acccess Iterator,但并不是原生指针。其实现复杂,也影响到相关算法的效率。
注意:非必要,应尽量使用vector而不是deque.的确需进行排序时,可以先将元素复制到vector,排序后再复制回deque.
4.Stack
特征:先进后出的数据结构,只可以在顶端进行元素操作。
stack不支持对元素的遍历,因此没有迭代器。
5.Queue
特征:先进先出的数据结构,实现方案和stack基本一样
6.Heap
STL定义了一些heap操作的算法:包括建堆,push_heap,pop_heap,sort_heap等
注意:heap并不是stl中的容器,以vector作为完全二叉树的存储结构,加上一些heap算法
7.Priority Queue
特征:拥有权值概念的queue,加入的元素按权值大小排列。
注意:priority_queue也是container adapter,它以vector为存储结构,再以heap算法进行处理:priority_queue的元素存放在一个vector当中,按元素权值排列成一个heap。
本文仅作学习记录,无任何商用目的。