STL容器比较
vector
采用连续的存储空间实现
优点
占用内存少
支持下标访问,快速的随机访问能力
缺点
插入或删除中间数据效率低,且耗时不固定(对于一些场景来说,影响效率)
只支持尾部push,pop
当可用空间不足时,会重新分配空间(原来的2倍),在C++11之前,会极大地影响效率,因为需要拷贝,再销毁原来元素,还会引起迭代器失效
list
采用链表实现
优点
插入或删除效率高,且耗时固定
可在两端进行push,pop
缺点
占用更多的内存
不支持随机访问
stack
提供栈概念
queue
提供队列(FIFO)概念
dequeue
提供双端队列概念
优点
支持随机访问和at
可在两端进行push、pop
priority_queue
提供优先级队列概念
set
提供集合概念(元素唯一),内部采用平衡二叉树实现,遍历时有序
unordered_set
无序的集合
multiset
可重复的集合
unordered_multiset
无序的,可重复的集合
tuple
提供元组概念(存储一组不同类型的值)
map
提供字典概念,内部采用红黑树实现,遍历时有序
multimap
key可重复的map
unordered_map
无序字典,又叫hashmap,内部采用hash实现,相比map,多占用内存(存放hash桶元素),访问效率高
unordered_multimap
key可重复的hashmap
array
数组,存储固定大小的序列
优点
- 相比C风格数组,提供了STL式API,越界检查