一、定义和声明
——头文件和声明
他有一个特殊的头文件,和stl一样,都是定义名,叫vector。
先列一些stl的名字和头文件。
队列:
#include<queue>
queue<int> q;
priority_queue<int,vector<int>,greater<int> >pq;
栈:
#include<stack>
stack<int> s;
那么动态数组呢——
#include<vector>
vector<类型> 名字;
比如:
vector<int> a;
vector<char> c;
还有别的:
①vector<int> a(10);//10个数
②vector<int> a(10,1);//10个1
③int b[3]={0,1,2};
vector<int> a(b,b+3);//头,尾+1
二、操作
a.push_back(k);//数组尾插入元素(又名赋值)
a.pop_back(k);//数组尾元素出来
a[i];//取a第i个数值,如cout<<a[i];——输出
a.size();//返回a大小
a.clear();//把a清空
a.empty();//判断a是否为空
a.front();//返回a的第一个元素
a.back();//返回a的最后一个元素
a.erase(a.begin(),a.end-1);//删除这一段
a.insert(a.begin()+1,5); //在这个位置插入5
a.insert(a.begin()+1,3,5);//在这个位置插入3个5
a.insert(a.begin()+1,b+3,b+6);////在这个位置插入b+3到b+6这一段(第三个元素到第五个元素)
a.resize(10); //将a的长度设为10
a.resize(10,2); //将a的长度设为10,不够的用2来填
a.reserve(100);//将a的元素个数扩充至100个。
a==b; //比较,还有>=,<=等操作
其实vector和stack、queue挺像的,换句话说,两个东西的结合体,有FILO、a.front()back()等操作。
三、注意
1.错误赋值:
vector<int> a;
for(int i=1;i<=1001;i++) a[i]=i+1;
千万别这么干。但在
vector<int> a(10);
这个情况下可以用a[3]=10;等语句(别用a[10]、a[100]……).
2.此物是FILO,所以嘛,中间的东西,出不来,进不了。头上的,也是一样,出不来,进不了,这就是个小问题。不过,空间现在比较足,不常用vector,或者空间不够,只能用时间换了。时间吗,一秒10^8-10^9次操作,只要稍稍优化就行了。除非是noi,别的没大关系。
总结:vector,属于典型的省空间、比较烦的那种,反正我没事不用,知道就好,也不管了。要用时再用哈。
这次主要对一些函数和赋值语句做了修改,再见。