七种STL容器类型:
- deque
- forward_list // C++11
- list
- queue
- priority_queue
- stack
- vector
以上都是序列。
### 序列概念增加了迭代器至少是正向迭代器这样的要求,这保证了元素将按特定顺序排列,不会在两次迭代之间发生变化。
### 序列还要求其元素按严格的线性顺序排列,即存在第一个元素、最后一个元素,除第一个元素和最后一个元素外,每个元素
### 前后都分别有一个元素
序列的要求
表达式 | 返回类型 | 说明 |
X a(n, t); | 声明一个名为a的由n个t值组成的序列 | |
X(n, t); | 创建一个由n个t值组成的匿名序列 | |
X a(i, j) | 声明一个名为a的序列,并将其初始化为区间[i, j)的内容 | |
X(i, j) | 创建一个匿名序列,并将其初始化为区间[i, j)的内容 | |
a.insert(p, t) | 迭代器 | 将t插入到p的前面 |
a.insert(p, n, t) | void | 将n个t插入到p的前面 |
a.insert(p, i, j) | void | 将区间[i, j)中的元素插入到p的前面 |
a.erase(p) | 迭代器 | 删除p指向的元素 |
a.erase(p, q) | 迭代器 | 删除区间[p, q)中的元素 |
a.clear() | void | 等价于erase(begin(), end()) |
模板类:
- deque
- list
- queue
- priority_queue
- stack
- vector
都是序列概念的模型,故均支持上表运算符。此外,这六个模型中的一些还支持其它操作。在
允许的条件下,它们的复杂度为固定时间:
序列的可选要求
表达式 | 返回类型 | 含义 | 容器 |
a.front() | T& | *a.begin() | vector、list、deque |
a.back() | T& | *--a.end() | vector、list、deque |
a.push_front(t) | void | a.insert(a.begin(), t) | list、deque |
a.push_back(t) | void | a.insert(a.end(), t) | vector、list、deque |
a.pop_front(t) | void | a.erase(a.begin()) | list、deque |
a.pop_back(t) | void | a.erase(--a.end()) | vector、list、deque |
a[n] | T& | *(a.begin() + n) | vector、deque |
a.at(t) | T& | *(a.begin() + n) | vector、deque |
### 说明:a[n]和a.at(n)都返回指向容器中第n个元素的应用;差别在于,如果n落在容器的有效区间外,
### 则a.at(n)将执行边界检查,并引发out_of_range异常。
### 此外,表中a.ushi_front(t)没有涉及vector容器的原因是在vector的前面插入新值将导致前面添加的值位置后移,
### 故复杂度是线性时间,而上表仅考虑为固定时间的情况