构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <vector>

// 1. 创建空的 v1
vector<int> v1; // initially empty

// 2. 创建一个初始容量为 10 的v2, 默认值为 0,如果是 string 类型,就是空字符串
vector<int> v2(10);

// 3. 创建一个初始容量为 10,初始值为 0 的v3
vector<int> v3(10, 0);

// 4. 将一个数组的一部分元素作为初始化赋值给 v4
int a[5] = {0, 1, 2, 3, 4};
vector<int> v4(a, a+2); // 得到 a 数组的前 2 个元素
// or
vector<int> v4(begin(a), end(a)); // 赋值整个数组 a

// 5. v3 赋值给 v5
vector<int> v5(v3);
vector<int> v6 = v3;

// 初始化
vector<int> v7 = {0, 1, 2};
vector<int> v8{0, 1, 2};
// 创建二维数组
vector< <vector<int> > v9; // 最外的 <> 最好有空格,否则老的编译器会报错

// 可以通过 size_type 设定容量
vector<int>::size_type n = 2;
vector<int> v10(n);

插入元素

push_back(),尾部添加元素

1
2
3
vector<int> v;
v.push_back(7);
v.push_back(5);

insert(),任意位置插入元素

1
2
vector<int> v = {1, 2, 3};
v.insert(v.begin()+1, 4); // {1, 4, 2, 3}

删除元素

pop_back(),删除尾部元素

1
2
vector<int> v = {1, 2, 3};
v.pop_back(); // {1, 2}

erase(),删除指定范围元素

1
2
vector<int> v = {1, 2, 3};
v.erase(v.begin()+1, v.begin()+2); // {1, 3}

clear(),清空所有元素

1
2
vector<int> v = {1, 2, 3};
v.clear();

访问元素

string 一样都可以使用元素下标,基于范围循环和 迭代器 来访问元素

除此之外,还能够使用 at() 函数

1
2
vector<int> v = {1, 2, 3};
cout << v.at(1) << endl; // 2

at() 函数会进行边界检查,所以性能较低

vector,array 和 数组

vector 对象存储在堆中,而 array 和数组时存储在栈中

C++ 数组不会检查 越界,vector 和 array 对象的成员函数 at() 可以检查索引是否合法