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;
}

浙公网安备 33010602011771号