STL

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
## 基础汇总:

- Set自动升序排列、自动去重
- pair

```cpp
#include <iostream>
#include <vector>
#include <algorithm> // 用于 remove 和 find 函数

using namespace std;

// vector的声明
vector<int> v1;

// 声明一个二维vector
vector<vector<int>> v2;

// vector的快速设置容器大小
vector<vector<int>> v1(10); // 设置容器大小为10

// 设置vector的容器大小
v1.resize(10);

// vector迭代器的声明
vector<int>::iterator it = v1.begin();

// 判断一个vector是否为空
if (v1.empty()) {
// v1 是空的
}

// 拷贝函数
v2.assign(v1.begin() + 1, v1.end() - 1);

// 插入
// 容器后面添加元素
v1.push_back(11);
// 容器前面添加元素
v1.insert(v1.begin(), 0);
// 容器中某个位置插入元素
v1.insert(v1.begin() + 5, 100);
// 让一个vector的一个[num,num)的数插入到另一个vector
v1.insert(v1.begin(), v2.begin() + 1, v2.end() - 2);

// 删除
v1.erase(v1.begin());

// 查找
// 注意:vector没有直接的find方法,需要使用algorithm中的find函数
auto it = find(v1.begin(), v1.end(), 3);
if (it != v1.end()) {
// 找到了元素3
}

// 删除容器里所有的特定数字
v1.erase(remove(v1.begin(), v1.end(), 3), v1.end());

// 用迭代器
for (it = v1.begin(); it != v1.end(); ++it) {
cout << *it << " ";
}

// 用for循环
for (int i = 0; i < v1.size(); ++i) {
cout << v1[i] << " ";
}

// 声明二维vector循环遍历
vector<vector<int>> v3 = { {1,2,3}, {4,5,6}, {7,8,9} };
for (vector<int>& row : v3) {
for (int& col : row) {
cout << col << " ";
}
cout << endl;
}

// C++11的写法
for (const auto& row : v3) {
for (const auto& col : row) {
cout << col << " ";
}
cout << endl;
}

关键点说明:

  1. Set 特性:自动排序和去重
  2. pair 用法:未展示具体代码但需注意其二元组特性
  3. 所有vector操作包含:
    • 声明与初始化
    • 大小调整
    • 迭代器使用
    • 增删改查操作
    • 多维vector遍历
  4. 特别注意事项:
    • vector没有内置find,需用<algorithm>的find
    • 删除特定值需配合remove使用
    • 现代C++推荐使用范围for循环