一、容器种类:
1、顺序容器是线性结构,顺序容器中每个元素的位置与元素的值无关,只与元素添加到容器的次序有关。顺序容器有:array(C++11)、vector、list、deque、forward_list(C++11)
2、关联容器:关联容器是非线性结构(一般使用树结构),元素的存储按照一定的顺序存储。关联容器有:map、set、multimap、multiset
3、无序关联容器:unordered_set(C++11)、unordered_map(C++11)、unordered_multiset(C++11)、unordered_multimap(C++11)
3、容器适配器:容器适配器本身不是一种新容器,是利用已有的容器创建的按照一定规则的数据结构,例如 stack 用 vector/deque/list 对象创建的先进后出的结构(个人理解)。容器适配器有:stack、queue、prior_queue
二、容器的操作
三、容器的对比
| 容器 | 底层数据结构 | 特点 | 备注 |
顺序容器 | array | 数组 | 固定大小,随机访问 |
|
vector | 数组 | 动态数组,随机访问 |
| |
deque |
| 首尾快速增加和删除,支持随机访问 |
| |
forword_list | 单链表 | 支持任何位置的快速插入和删除 |
| |
list | 双链表 | 支持任何位置的快速插入和删除 |
| |
关联容器 | set | 红黑树 | 键唯一,已排序,搜索、移除、和插入是对数复杂度 |
|
map | 红黑树 | 键唯一,存储有序键值对,搜索、移除、和插入是对数复杂度 |
| |
无序关联容器 | unordered_set | 哈希表 | 键唯一, 无序,搜索、插入和移除拥有平均常数时间复杂度 |
|
unordered_map | 哈希表 | 键唯一,无序,搜索、插入和移除拥有平均常数时间复杂度 |
| |
容器适配器 | stack | list/deque | 先进后出 |
|
queue | list/deque | 先进先出 |
| |
priority_queue | vector和堆 |
|
|
四、参考资料
1、《C++ primer》
2、https://zh.cppreference.com/w/cpp/container