介绍
vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
方法
v.assign(beg,end)
//将[beg,end)区间的数据赋值给v
v.assign(n,elem)
//将n个elem的拷贝复制给v
创建一个vector
1.创建一个int类型的空的vector对象
vector<int> vInts;
2.创建一个包含500个int类型的vector
vector<int> vInts(500);
//size大小为500,初始化都是0
3.创建一个包含200个int类型数据的vector,并且初始化为7
vector<int> vInts(200,7);
4.创建一个int的拷贝
vector<int> vInts(200,7);
vector<int> vIntCopy(vInts);//这样2个vector就都一样了
向vector添加一个数据
push_back()
Example
<span style="white-space:pre"> </span>vector<int> vInts;
int i;
for (i = 0;i<7;i++)
{
<span style="white-space:pre"> </span>vInts.push_back(i);
}
for (i = 0;i<7;i++)
{
cout<<"vInts.at("<<i<<")="<<vInts.at(i)<<endl;
}
Oouput
<img src="https://img-blog.csdn.net/20151112104753263?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
访问vector中的数据
<span style="white-space:pre"> </span>1.vector::at()<span style="white-space:pre"> </span>//优先方案,因为at()进行了边界检查(bounds checked)如果访问超过了范围,将抛出一个例外
<span style="white-space:pre"> </span>2.vector::operator[]<span style="white-space:pre"> </span>//容易造成错误
Example
vector<int> v;
v.reserve(10);
for (int i = 0;i<7;i++)
{
v.push_back(i);
}
try
{
//int iVal1 = v[7];//Error!
int iVal2 = v.at(7);
}
catch (const exception& e)
{
cout << e.what();
}
Output
删除vector中的数据
1.erase(pos); erase(beg,end);//参数为const_iterator
2.pop_back()
3.clear()
Example
vector<int> vInts;
int i;
for (i = 0;i<7;i++)
{
vInts.push_back(i);
}
cout<<"vInts.size = "<<vInts.size()<<endl;
for (i = 0;i<vInts.size();i++)
{
cout<<"vInts.at("<<i<<")="<<vInts.at(i)<<endl;
}
vInts.erase(vInts.begin());
cout<<"vInts.size = "<<vInts.size()<<endl;
for (i = 0;i<vInts.size();i++)
{
cout<<"vInts.at("<<i<<")="<<vInts.at(i)<<endl;
}
vInts.erase(vInts.begin()+2);
cout<<"vInts.size = "<<vInts.size()<<endl;
for (i = 0;i<vInts.size();i++)
{
cout<<"vInts.at("<<i<<")="<<vInts.at(i)<<endl;
}
vInts.pop_back();
cout<<"vInts.size = "<<vInts.size()<<endl;
for (i = 0;i<vInts.size();i++)
{
cout<<"vInts.at("<<i<<")="<<vInts.at(i)<<endl;
}
vInts.clear();
cout<<"vInts.size = "<<vInts.size()<<endl;
for (i = 0;i<vInts.size();i++)
{
cout<<"vInts.at("<<i<<")="<<vInts.at(i)<<endl;
}
Output
<span style="white-space:pre"> </span>
vector 中的size和capacity
size 是指容器当前拥有元素的个数
capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。
如vector<int> vInts(10; //capacity = 10;size=10
当pushback一个数进去的时候size+1,但capacity有可能+5或+10
即容器重新分配空间是按现有空间的2倍进行分配,以保证vector的效率!
其中,函数reserve(size_type)只是扩大capacity值,而这些空间还是“野”的,不能用[]访问,只能pushback
resize(size_type)则会重新指定队列的长度,会初始化!
<span style="white-space:pre"> </span>