vector是非常方便的,一个模板库,可以在很多时候避免我们写很多行代码来实现一个经常用的东西.他的功能也非常强大,值得我们去学习.
这里面所有基础代码句子可以当成一个模板去记,虽然很多,但是学的时候也要打几遍,才能更好的记忆.
先把所需要的基础代码句子看一下:
//所需头文件
/*
#include<vector>//容器
#include<algorithm>//迭代器
*/
//创建
vector<int>v;//这是建立一个vector容器v,尖括号以内是说明容器存储的数据类型
//插入
v.push_back(10);//这是在容器里面放入数据10,尾部插入.
v.insert(v.begin(),2,100);//在容器头部里面放入2个100;
//访问
pos=v.front();//返回容器中第一个元素
pos=v.back();//返回容器中最后一个元素
v.empty();//判断该容器是否为空返回0,1;
//删除
v.erase(v.begin());//删除数据,头部删除.(括号内不必填数据)
v.pop_back();//也是删除数据,尾部删除.(括号内不必填数据)
v.erase(v.begin(),v.end());//清空容器内数据
//容器大小
pos=v.capacity();//pos为容器容量大小.(括号内不必填数据)
pos=v.size();//pos为容器里数据数量(括号内不必填数据)
v.resize(10);//改变容量,但是容器大小不变,多出的数据删除,多出的数据位置补为0;
v.reserve(100000);//将容器大小预存为100000;
vector<int>(v).swap(v);//用swap收缩内存;
reserve的使用原因
容器的使用中在存储的数据变多时,最早的容器申请为1;当超出容器大小时会重新申请一个能放下这些数据的容器,该容器大小不确定,但是当容器很大的时候,接近于原来的二分之三.所以在不断地更换容器的时候,只想原来容器的指针已经没有作用了.而且不断地更换容器会比较麻烦可以使用reserve来预留一个大的容器直接使用不用去不断地更换容器.
清空容器
在一个多实例的题里面,容器的数据可能会影响下一个样例的计算,所以要清空,当然也可以重新申请一个容器,避免出错.
swap收缩内存
因为一个容器在不断的存入数据和删除的时候,容器可能很大,但是数据的量可能会很少,这个时候就很占用内存.无用空间太多,所以可以使用swap来收缩内存,避免浪费.vector<int>(v).swap(v);意思就是重新申请一个适合的容器来存储,而原来的容器删除.
容器的遍历
容器的遍历需要使用迭代器
//这个?是你所创建的容器名称
第一种遍历
for(vector<int>::iterator it=?.begin();it!=?.end();it++)
{
cout<<*it<<endl;
}
第二种遍历
vector<int>::iterator itBegin=?.begin();
vector<int>::iterator itEnd=?.end();
while(itBegin!=itEnd)
{
cout<<*itBegin<<endl;
itBegin++;
}
第三种遍历 回调函数for_each//myprint是自己定义的函数用来输出
void myprint(int val)
{
cout<<val<<endl;
}
for_each(a.begin(),a.end(),myprint);
这种遍历是从头到尾过一遍,了解就行.
vector的运用需要自己去判断,不是所有的情况使用vector都合适.这种特殊容器的调用耗费时间,所以要有这个概念.