一.容器类型
容器类型 | 介绍 |
---|---|
vector |
可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。 |
deque |
双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。 |
list |
双向链表。只支持双向顺序访问。在list 中任何位置进行插入/删除操作速度都很快。 |
forward_list |
单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作速度都很快。 |
array |
固定大小数组。支持快速随机访问。不能添加或者删除元素。 |
string |
与vector 相似的容器,但专门用于保存字符。随机访问块。在尾部插入/删除速度快。 |
- 如果程序只有在读取输入时才需要在容器中间位置插入元素,随后需要随机访问元素
- 首先,确定是否真的需要在容器中间位置添加元素。当处理输入数据时,可以向vector追加数据,再调用sort函数来重排容器的元素,从而避免在中间位置添加元素。
- 如果必须在中间位置插入元素,考虑在输入阶段使用list,一旦输入完成,将list的内容拷贝到一个vector中。
二.容器操作
1.初始化
操作 | 解释 |
---|---|
C c; |
默认构造函数,构造空容器 |
C c1(c2); 或C c1 = c2; |
构造c2 的拷贝c1 |
C c(b, e) |
构造c ,将迭代器b 和e 指定范围内的所有元素拷贝到c |
C c{a, b, c...} |
列表初始化c |
C c(n) |
只支持顺序容器,且不包括array ,包含n 个元素,这些元素进行了值初始化 |
C c(n, t) |
包含n 个初始值为t 的元素 |
1.1 拷贝
- 直接复制:将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同。
- 使用迭代器复制(除array外):不要求容器类型相同,容器内的元素类型也可以不同。
1.2 array
array
具有固定大小。array<int, 10>
- 和其他容器不同,默认构造的
array
是非空的:它包含与其大小一样多的元素,这些元素被默认初始化。 - 虽然不能对内置