vector收录在STL里,是一种特殊的数据结构。它的中文名字叫做“动态数组”或者“不定长数组”,有时也被翻译成“容器”。
基本操作:
1、构造一个vector:vector<T> vec。其中T是我们数组要储存的数据类型,可以是int、float、double等。初始的时候vec是空的 。
2、通过push_back()方法在数组最后面插入一个新的元素。
3、通过size()方法获取vector的长度,通过[]操作直接访问 vector中的元素,和数组是一样的。
4、修改vector中某个元素的话,只需要用=给它赋值来修改vector中某个元素。
5、调用clear()方法就可清空vector。
例子如下:
1 #include<vector>//不要忘记打头文件
2 using namespace std;
3 //定义方法:
4 vector<int> myvec;// 一开始先定义一个整型的空的vector动态数组
5 //也可以先赋给它初始值:
6 vector<int> m(a,b); //在m里装a个b
7 vector<int> n(a);//在n里装a个0,通常可以省略"(a)"
8 //也可以这么玩:
9 vector<int> a(myvec);//定义一个和myvec一模一样的动态数组
10 vector <int> b(a.begin()+l,a.end()-r);//继承a动态数组下标[l,a.end()-r)的值,注意,下标从0开始
11 int main(){
12
13 //使用方法:
14
15 myvec.front();//返回myvec数组的第一个元素的值,即0
16 myvec.back();// 返回myvec数组的最后一个元素的值,即2
17 myvec.begin();//返回myvec数组的第一个数的下标,即0
18 myvec.end();//返回myvec数组的最后一个数的下标,即2
19 myvec.empty();//判断myvec数组是否为空,是空则返回1(true),非空(有元素)则返回0(false)
20 myvec.swap(m);//m是另一个动态数组,这里是将myvec和m的元素互换,可以直接写swap(myvec,m)
21 myvec[1]=3;//变成0,3,2(落谷网校讲义上的可能是作者手误吧,竟然打成了0,3,3 ,其实模拟一下就很容易得到正确答案)
22 myvec[2]=1;//变成0,3,1
23 //vector的插入:
24 myvec.push_back(0);//在myvec数组的尾部插入数,现在vector动态数组里的元素有:0
25 myvec.push_back(1);//现在vector动态数组里的元素有:0 ,1
26 myvec.push_back(2);//现在vector动态数组里的元素有:0 ,1,2
27 myvec.insert(myvec.begin()+k,a);//在下标k的前面插入数a,k之后的数依次后退一位
28 myvec.insert(myvec.begin()+k,p,a);//在下标k前面插入p个a,k之后的数依次后退一位
29 //输出方法:
30 for(int i=0; i<vec.size(); ++i) //从头依次输出vector中的元素
31 {
32 printf("%d\n",vec[i]);
33 }
34 //如果需要遍历元素,还可以使用迭代器。(反正我是不会,大神可以继续)
35 for(vector<int>::iterator it=myvec.begin(); it!=myvec.end(); it++) {
36 printf("%d\n",*it);
37 }
38 //vector的删除
39 myvec.pop_back()//删除最后一个元素
40 myvec.erase(myvec.begin()+k);//删除下标为k的数,返回下一个位置的下标
41 myvec.erase(myvec.begin()+l,myvec.end()-r);//删除下标[l,myvec.end()-r)的元素
42 myvec.clear();//清空vector动态数组
43 //打代码时千万不要忘记它是从vec[0]开始的 !
44 //除myvec[i]外,其余都是vector的自带函数,因此必须添上括号!
45 }
有关vector的内存机制和性能分析可以参考这个网址:https://blog.csdn.net/mfcing/article/details/8746256
不要尝试自己测试,除非你对自己的电脑有很大的信心,反正我用学校机房电脑测试了一下直接蓝屏了……