引言

有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难,但是在 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++ 中的 vectorclear()只是清空 vector,并不会清空开的内存,清理内存只能:

vector<int> v;
{   // 大括号不能丢
    vector<int> x;
    v.swap(x);
}

总结

方法 功能
push_back 在末尾加入一个元素
pop_back 在末尾弹出一个元素
size 获取长度
clear 清空

C++ vector 官方参考文档

对应练习题

打印锯齿矩阵
堆积木

返回目录,查看更多

收藏