序列容器类型
-
vector
-
list
双向链表。与 vector 区别在于,list 任何位置的插入和删除都是固定时间的(vector 在除了结尾处插入和删除都是线性时间,结尾处固定时间)。
不支持数组表示法和随机访问。与矢量迭代器不同,从容器中插入和删除后,链表迭代器指向的元素不变。
list 成员函数
函数 说明 复杂度 void merge(list<T,Alloc>&x) 将链表 x 与调用链表合并,两个链表必须已经排序连接之后,x 为空。 线性时间 void remove(const T &val) 删除 val 的所有实例 线性时间 void sort() 使用<运算符对 list 进行排序 NlogN void splice(iterator pos, list<T,Alloc>x) 在 pos 位置之前插入链表 x 固定时间 void unique() 将连续的相同元素压缩为单个元素 线性时间 -
deque
双端队列。支持随机访问。与 vector 主要区别在于 从deque 对象的开始位置(两个)插入和删除元素的时间是固定的,而不像vector 线性时间。如果多数操作发生在序列的起始和结尾处,用 deque。因此,vector 强调通过随机访问实现快速访问,list 强调元素的快速插入和删除。
-
queue 、stack
不仅不允许随机访问,甚至不允许遍历队列。
-
array
并非 STL 容器。长度固定,因此没有定义调整 array 大小的操作。
-
forward_list
实现了单链表。
关联容器类型
-
set
值与键的类型相同,可反转,可排序,键唯一。键就是值。
-
multiset
与 set 类似,只是可能有多个值的键相同。
-
map
与 set 类似,值与键的类型不同。 -
multimap
与 multiset类似,同一个键可能与多个值关联。
equal_range(k)返回的是一个值对,其中第一个成员为 lower_bound(k),即第一个键不小于 k 的元素,第二个成员指向upper_bound(k),即第一个键大于 k 的元素。