09 顺序容器

9.1 顺序容器概述

容器

描述

vector

随机访问。尾部插删快

deque

随机访问。首尾插删快

list

双向顺序访问。任意位置插删快

forward_list

单项顺序访问。任意位置插删快

array

随机访问。不能添加删除元素

string

类似vector,不过元素类型指定了为字符

一般来说,应用中占主导地位的操作(访问操作还是插删操作)决定了容器类型的选择。

9.2 容器库概览

array

标准库array的大小是类型的一部分,定义array时,必须同时指定大小

array<int, 42> arr1;
array<string, 10> arr2;

对于内置数组,不能进行拷贝或对象赋值。但是array可以

int digts[10] = {1,2,3,4,5,6,7,8,9,0};
int cpy[10] = digs; // 错误
array<int, 10> digits = {1,2,3,4,5,6,7,8,9,0};
array<int, 10> copy = digits; // 正确

assign和swap

顺序容器可以使用assign

  • seq.assign(b, e) 将seq中的元素替换为迭代器b和e所表示的范围中的元素。迭代器b和e不能指向seq中的元素

  • seq.assign(il) 将seq中的元素替换为初始化列表il中的元素

  • seq.assign(n, t) 将seq中的元素替换为n个值为t的元素

swap交换两个相同类型容器的内容

vector<int> vect1(1, 0);
vector<int> vect2(2, 1);
swap(vect1, vect2);
for (auto item : vect1) cout << item << " "; // vect1中的内容被换成了2个1,输出 1 1

关系运算符

  • 如果两个容器大小一样且对应的元素也一样,则相等,否则不相等

  • 如果较小容器是较大容器的前缀子序列,则较小容器小于较大容器

  • 如果较小容器不是较大容器的前缀子序列,则它们的比较结果取决于第一个不相等的元素的比较结果。

9.3 顺序容器操作