标准库类型vector表示对象的集合,其中所有对象的类型都相同。

引入

1
2
#include <vector>
using namespcae std;

vector 是模板而非类型,由vector生成的类型必须包含vector中元素的类型

1
2
vector<int> ivec;               // ivec保存int类型的对象
vector<Sales_item> Sales_vec; // 保存Sales_item类型的对象

某些编译器可能需要vector<vector<int> >来定义vector的元素还是vector的场景。

定义和初始化vector对象

1
2
3
4
5
6
7
vector<T> v1;
vector<T> v2(v1);
vector<T> v2 = v1;
vector<T> v3(n, val);
vector<T> v4(n);
vector<T> v5{a, b, c...};
vector<T> v5 = {a, b, c...}

C++新标准:列表初始化

1
vector<string> articles = {"a", "an", "the"};

列表初始值还是元素数量

1
2
3
4
5
vector<int> v1(10);     // v1有10个元素,每个元素都是0
vector<int> v2{10}; // v2有1个元素,该元素都是10

vector<int> v3(10, 1); // v3有10个元素,每个值都是1
vector<int> v4{10, 1}; // v4有2个元素,值分别是10和1

向vector对象中添加元素

创建一个数组包含的元素是从0到99。

1
2
3
vector<int> v2;
for (int i = 0; i != 100; ++i)
v2.push_back(i)

其他vector操作

1
2
3
4
5
6
7
8
9
v.empty()           // 如果v不含有任何元素,返回真:否则返回假
v.size() // 返回v中元素的个数
v.push_back(t) // 向v的尾端添加一个值为t的元素
v[n] // 返回v中第n个位置上元素的引用
v1 = v2 // 用v2中元素的拷贝替换v1中的元素
vl = {a,b,c... } // 用列表中元素的拷贝替换v1中的元素
v1 == v2 // v1和v2相等当且仅当它们的元素数量相同且对应位置的元素值都相同
v1 != v2
<,<=, >,>= // 顾名思义,以字典顺序进行比较

将列表中元素进行平方

1
2
3
4
5
6
vector<int> v{1, 2, 3, 4, 5, 6};
for (auto &i : v)
i *= i;
for (auto i : v)
cout << i << " ";
cout << endl;

要使用size_type,需首先指定他是由哪种类型定义的。vector对象的类型总是包含着元素的类型

1
2
vector<int>::size_type  // 正确
vector::size_type // 错误

vector对象(以及string)的下注运算符可用于访问已存在的元素,而不能用于添加元素。