- 序列式容器
- vector:动态空间,随着新元素的加入,它的内部机制会自行扩充空间以容纳新元素; 它采用的数据结构是线性连续空间(push_back,pop_back,erase,clear,insert)
- list:环状双向链表,每次插入或者删除一个元素就配置或者释放一个空间,对于空间的利用有绝对的精准,一点也不浪费,而且对于插入和删除,list永远是常数时间;list的节点不保证在储存空间中连续存在;(push_front,push_back,erase,pop_front,pop_back,clear,remove,unique,splice,merge,reverse,sort)。
- deque:vector是单向的开口连续线性空间,deque是双向开口的连续线性空间,可以在首尾两端分别做元素的插入和删除;另一反面,deque没有所谓的容量观念,deque是动态的以分段连续空间(复杂度高)组合而成,随时可以增加一段新的空间并连接起来,vector则是“旧空间不足重新配置一段更大的空间,然后复制元素,释放空间”;除非必要,应该今可能选择vector而非deque,若对deque进行排序,为了最高效率,先将deque完整复制到一个vector身上,将vector排序后,再复制回deque;(push_back,push_front,pop_back,pop_front,clear,erase,insert)
- stack:先进后出的数据结构,不允许遍历(只对顶端操作) ,可以以deque,list作为底部结构,并封闭其头端开口,便可以形成一个stack(所以称为container adapter 容器配接器) ;(empty,size,back,push_back,pop_back)
- queue:先进先出的数据结构,双向开口,同样可以以deque,list为底部结构(容器配接器);(empty,size,front,back,push_front,push_back,pop_front,pop_back)
- priority_queue是一个拥有权值观念的queue,其内部的元素并非依照被推入的次序排列,而是依照元素的权值排列,权值高在前面,缺省情况下,priority_queue利用一个max_heap完成,后者是一个以vector表现的complete binary tree;类似queue,priority_queue归类于容器适配器;
- 关联式容器
- set:set的特性是所有元素会根据元素的键值自动被排序,和map不同,map可以拥有实值(value)和键值(key),set元素的键值就是实值,set不允许有两个元素相同的键值;标准的STL set是以RB-tree为底层机制。关联式容器可以使用其所提供的find函数来搜寻元素,会比STL 算法find()更有效率,因为STL 算法find()只能循序搜寻。
- map:map的特性是所有元素会根据元素的键值自动排序,所有元素都是pair,同时拥有实值(value)和键值(key);pair 的第一元素是键值,第二元素是实值。不允许两个元素有相同的键值。标准STL map以RB-tree为底层机制。