顺序容器
顺序容器类型:
- vector: 可变大小数组。vector<int> v;
- deque: 双端队列。
- list: 双向链表。
- forward_list: 单向链表。没有size()操作。迭代器不支持递减运算符--。
- array: 固定大小数组。array<int, 10> a; 支持拷贝a = b;
- string: 字符串。
如何确定使用哪种容器:
- 新标准库容器的性能几乎肯定与最精心优化过的同类数据结构一样好,通常会更好。
- 通常,使用vector是最好的选择,除非你有更好的理由。
- 如果空间开销很重要,不要使用list or forward_list。
- 如果程序要求随机访问,用vector or deque。
- trade-off,如果随机访问多,用vector/deque,如果中间插入多,用list。
容器库概览:
- 迭代器:
- begin <= end
- list<string>::iterator it; vector<int>::value_type i; vector<int>::reference r; vector<int>::difference_type d;
- begin(); cbegin(); rbegin(); crbegin();
- 容器定义和初始化:
- 每个容器类型都定义了一个默认构造函数(除array),创建一个指定类型的空容器,都可以接受指定容器大小和元素初始值的参数。
- 初始化方式:直接初始化(容器类型+元素类型必须匹配),拷贝初始化,列表初始化(包括迭代器范围初始化,只要类型可以转化就可以)。
- 顺序容器的与大小有关的初始化方式:vector<int> v(number, value);
- 赋值和swap
- c1 = c2
- seq.assing(b, e); seq.assign(n, t); seq.assign(il);
- swap(c1, c2); c1.swap(c2);相同类型,一般比拷贝快;用非成员版本的swap