16.4.5 容器种类(下:序列)

七种STL容器类型:

  1. deque
  2. forward_list // C++11
  3. list
  4. queue
  5. priority_queue
  6. stack
  7. 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())

模板类:

  1. deque
  2. list
  3. queue
  4. priority_queue
  5. stack
  6. 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的前面插入新值将导致前面添加的值位置后移,

### 故复杂度是线性时间,而上表仅考虑为固定时间的情况

posted @ 2020-08-22 23:22  孱陵  阅读(122)  评论(0编辑  收藏  举报