参考:cplusplus.com
(注意,所有可以用迭代器访问的东西都可以直接调用algorithm库的函数比如sort和reverse)
常用的容器类型如下:
数组类容器
【数组类容器分配的空间是连续的,可以通过下标索引方式找到】
array:静态数组
vector:动态数组,变长。
两者的相似之处在于迭代器类似。
但:
vector可以用的函数类型更丰富,初始化也更丰富。
因为是变长,所以也可以push_back和pop操作来决定元素的进出;
对于初始化特殊值为5个6:
array
arraynums.fill(6);
vector
此外,vector可以通过resize和reserve等方式调整大小。
链表类容器
list:双向链表
forward_list:单向链表。
链表,不再采用连续的内存空间。
初始化函数为assign,填充的参数和vector类似。
同样是序列类,list允许从前或者从后面操作(数组类只能从后往前做)
允许push_back,push_front和pop_back,pop_front
可以通过remove直接移除指定元素。
可以通过unique实现去重。
可以调用sort。
而forward_list只处理头部。
可以pop_front和push_front来管理头部
其余用法和list类似。
队列类容器
queue,FIFO类的队列。
允许push和pop
deque,双边的队列,允许push_back,push_front和pop_back,pop_front
特殊队列:优先队列,保证最前面的永远是最大的
stack, LIFO队列,允许 push和pop,也可以取top
map类容器
map的本质是红黑树
unordered_map的本质是哈希表
集合类容器
set的本质是平衡二叉树
unordered_set的本质是哈希表