容器用于存储不同类型的数据。
1. 容器类型
STL中包括序列式和关联式两种容器:
类型 | 容器名 | 说明 |
序列式容器 | vector (向量) | 相当于数组,可动态构建,支持随机访问,无头插和尾插,仅支持inset插入,数组可变大小 |
deque (双端队列) | 支持头插、删,尾插、删。 随机访问比vector容器慢,但对于首尾的数据操作比较方便 | |
list (双向循环列表) | 对于任意位置的插入和删除都很快,操作过后,指针、迭代器、引用都不会失效 | |
forward_list (单向链表) | 只支持单向访问,在链表的任何位置进行插入/删除操作都非常快 | |
array (固定数组) | vector的底层即为array数组,它保存了一个以严格顺序排列的特定数量的元素 | |
关联式容器 | set/multiset (集合/多重集合) | 对于set:集合有互斥性。使用insert插入元素时,已插入过的元素不可重复插入。集合内的元素默认按照升序进行排序。 对于multiset:可插入多个重复的元素,多重集合内的元素默认仍按照升序排列 |
map/multimap (映射/多重映射) | 二元关联容器(在构造时需要写两个参数类型,key值和value值) 因为有两个参数,因此在插入元素的时候需要配合对组pair进行插入。 |
2. 容器的使用场景
容器名 | 使用场景 |
vector | 记录一组数据 |
deque | 需要在一组数据头尾操作 |
forward_list/list | 需要在一组数据中间操作 |
set | 对固定类型数据的查找(例如查找学号对应的成绩) |
map | 对多个不同类型数据的查找(例如查找手机号对应的身份证号、姓名、家庭住址等) |