向量(Vector)是一个封装了动态大小数组的顺序容器。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
可以当需要大量插入,删除等操作时,可以用STL中的vector来代替普通数组。可用于普通数组超内存的情况和以邻接矩阵的方式存储图的情况。
需要声明头文件<vector>
vector 常用操作:
#include<vector> //声明一个vector容器 vector<int> v; //常用操作 v.push_back();//vector后加一个元素 v.pop_back();//删去vector的尾元素 v.size();//获得vector中元素个数 v.clear();//清空vector v.insert(it,x);//向vector任意迭代器it处插入一个元素x v.erase(it);//删去单个元素 v.erase(first,last);//删去区间[first,last)内的所有元素
声明二维vector vector<vector<int> > v (注意> >间的空格!!,>>是位运算符)
使用迭代器遍历容器
迭代器声明方法 vector<int> :: iterator it;
以题 简单的数据结构 为例
题目要求实现以下功能:
一开始该容器为空,有以下七种操作。
1 a从前面插入元素a
2 从前面删除一个元素
3 a从后面插入一个元素
4 从后面删除一个元素
5 将整个容器头尾翻转
6 输出个数和所有元素
7 对所有元素进行从小到大排序
代码如下:
#include<iostream> #include<cstdio> #include<vector> #include<algorithm> using namespace std; int main() { vector<int> v; int n,m; int op; cin>>n>>m; while(m--) { scanf("%d",&op); if(op==1) { int a; scanf("%d",&a); vector<int> :: iterator it; it=v.begin(); v.insert(it,a); } else if(op==2) { v.erase(v.begin()); } else if(op==3) { int a; scanf("%d",&a); v.push_back(a); } else if(op==4) { v.erase(v.end()-1); } else if(op==5) { reverse(v.begin(),v.end());//C++库函数 } else if(op==6) { printf("%d ",v.size()); for(int i=0;i<v.size();i++) { printf("%d",v[i]); if(i!=v.size()-1) printf(" "); } printf(" "); } else if(op==7) { sort(v.begin(),v.end());//C++库函数 } } return 0; }