vector
在c++中,vector是一个十分有用的容器。
作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
为了使用vector,必须包含头文件<vector>。另,vector属于std命名空间,因此需要通过命名限定,可以有如下三种方式,后两种方式更好,因为未引入无关的内容。
using namespace std;
using namespace std::vector;
std::vector<int> vec;
相关函数的功能:
vec.begin()//指向迭代器中第一个元素。 vec.end()//指向迭代器中末端元素的下一个,指向一个不存在元素。 vec.push_back(elem) //在尾部加入一个数据。 vec.pop_back() //删除最后一个数据。 vec.capacity() //vector可用空间的大小。 vec.size()//返回容器中数据个数。 vec.empty() //判断容器是否为空。 vec.front() //传回第一个数据。 vec.back() //传回最后一个数据,不检查这个数据是否存在。 vec.at(index) //传回索引idx所指的数据,如果idx越界,抛出out_of_range。 vec.clear() //移除容器中所有数据。 vec.erase(iterator) //删除pos位置的数据,传回下一个数据的位置。 vec.erase(begin,end) //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator vec.insert(position,elem) //在pos位置插入一个elem拷贝,传回新数据位置。 vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。 vec.insert(position,begin,end) //在pos位置插入在[beg,end)区间的数据,无返回值。
示例:
#include <iostream> #include <algorithm> #include <vector> using namespace std; #define N 5 const int M=20; vector <int> v; vector<int>::iterator i1,i2; typedef struct ve//结构体vector { char c; int i; double d; }sve; void pv()//输出 { for (i1=v.begin();i1!=v.end();i1++) { printf("%3d",*i1); } printf("\n"); } int main() { int i,j,a; for (i=0;i<N;i++)//int型vector { v.push_back(i); } printf("%20s","set vector:"); for (i=0;i<N;i++) { printf("%3d",v[i]); } printf("\n%20s%d %d\n","v.front,v.back:",v.front(),v.back()); i1=v.begin();//begin,end i2=v.end()-1; printf("%20s%d %d\n","*v.begin,*v.end:",*i1,*i2); v.insert(v.begin()+N,6);//insert,erase printf("%20s","insert:"); pv(); printf("%d\n",v.at(N)); v.insert(v.begin(),N,N); pv(); v.insert(v.begin()+N,v.begin()+N,v.end()); pv(); printf("%20s","erase:"); v.erase(v.begin()); pv(); v.erase(v.begin(),v.begin()+1); pv(); v.erase(v.begin(),v.end()-2); pv(); printf("%20s","size:"); printf("%d\n",(int)v.size());//size printf("%20s","clear:"); v.clear();//clear printf("%d\n",(int)v.size()); printf("%d\n",v.empty()); vector <sve> v1;//创建结构体vector sve ve; for (i=0;i<N;i++) { ve.c='i'; ve.d=(double)N; ve.i=N; v1.push_back(ve); } vector <sve>::iterator i3; for (i3=v1.begin();i3!=v1.end();i3++) { printf("%c %lf %d\n",(*i3).c,(*i3).d,(*i3).i); } return 0; }