引言
有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难,但是在 C++ 里面有已经写好的标准模板库(Standard Template Library),就是我们常说的 STL 库,实现了集合、映射表、栈、队列等数据结构和排序、查找等算法。我们可以很方便地调用标准库来减少我们的代码量。
C++ 中动态数组写作 vector,C 语言中没有标准库,因此非常建议 C/C++ 组的选手使用C++ 进行比赛,即使你之前只用过 C 也没关系,因为 C 语言的代码几乎都可以被 C++ 编译器正确理解。用 C 语言同学尽管写的是 C 代码也尽量用 C++ 的方式编译。
引用库
C++ 中 vector
的实现在一个 <vector>
头文件中,在代码开头引入这个头文件,并在引入所有头文件之后加上一句 using namespace std
#include <vector>
using namespace std;
int main() {
return 0;
}
构造一个动态数组
现在我们来构造一个动态数组。
C++中直接构造一个vector
的语句为:vector<T> vec
。这样我们定义了一个名为 vec 的储存 T 类型数据的动态数组。其中T 是我们数组要储存的数据类型,可以是int、fid double、或者其他自定义的数据类型等等。初始的时候 vec 是空的。
插入元素
C++ 中通过 push_back()
方法在数组最后面插入一个新的元素
#include <vector>
using namespace std;
int main() {
vector<int> vec; // []
vec.push_back(1); // [1]
vec.push_back(2); // [1, 2]
vec.push_back(3); // [1, 2, 3]
return 0;
}
获取长度并访问元素
C++ 中通过 size()
方法获取 vector
的长度,通过 [ ] 操作直接访问 vector
中的元素
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> vec; // []
vec.push_back(1); // [1]
vec.push_back(2); // [1, 2]
vec.push_back(3); // [1, 2, 3]
for (int i = 0; i < vec.size(); ++i) {
printf("%d\n", vec[i]);
}
return 0;
}
修改元素
C++ 中修改 vector
中某个元素很简单,只需要用 = 给它赋值就好了,比如 vector[1] = 3
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> vec; // []
vec.push_back(1); // [1]
vec.push_back(2); // [1, 2]
vec.push_back(3); // [1, 2, 3]
vec[1] = 3; // [1, 3, 3]
vec[2] = 2; // [1, 3, 2]
for (int i = 0; i < vec.size(); ++i) {
printf("%d\n", vec[i]);
}
return 0;
}
清空
C++ 中都只需要调用 clear()
方法就可清空 vector
C++ 中的 vector
的 clear()
只是清空 vector
,并不会清空开的内存,清理内存只能:
vector<int> v;
{ // 大括号不能丢
vector<int> x;
v.swap(x);
}
总结
方法 | 功能 |
---|---|
push_back | 在末尾加入一个元素 |
pop_back | 在末尾弹出一个元素 |
size | 获取长度 |
clear | 清空 |