简介
vector 就是一个不定长的数组,它封装了一些常用的操作,定义时可以用vector< int >a,表示a是一个vector数组。a.size()可以访问数组的长度,a.resize()可以改变它的大小,a.push_back()可以向其尾部增加元素,而a.pop_back()则是删除其尾部元素。
vector是一个模板类,同时vector还可以嵌套另一个vector数组表示成一个二维数组的形式,这在一些数据范围较大的题内很有用处。
比如普通一维数组开大于
1
0
9
10^{9}
109的长度就会报错,二维是
1
0
5
10^{5}
105,这时用动态数组就可以了。
初始化
vector<int>a(100);
这句是将a数组的长度初始化为100,这是通过构造函数来实现的,还有其它许多构造函数,下面一一举例。
vector<int>a(100,1);
这样是将内部的100个元素全部初始化为1.
vector<int>a(100,1);
vector<int>b(a);
其中b是拷贝构造函数。
使用误区
许多初学者(包括我)在使用时都直接将它当成了正常的数组来使用,但他们是不完全一样的,vector是动态数组,使用前是需要给它分配空间的,跳过分配空间这一步的话,编译器不会报错,但会无法运行,如果用它提交程序的话会显示runtime error。
正确的做法是利用其内部的构造函数来对它分配空间,或者选择push_back()这一函数,分配完空间后动态数组就和正常数组无异啦。
在题目中的一些感悟
起初以为它毫无利用价值,到现在发现其功能真的非常强大,不过因为内存分配这个问题让我RE了好多次才发现是这的问题,特意去搜了资料,所有问题都要追根溯源嘛,了解它的构造,认识到它的本质才能熟练掌握。加油!