3.5 STL之vector的使用一(初始化vector)

简介:vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,除非你知道你有特殊需要,使用vector不能满足你的需求,例如需要容器在head和tail高效的插入和删除,或者在任何位置高效的删除和插入操作,那么你可能使用deque或者list更加合适。

vector是连续内存容器,换句话说,标准要求所有标准库实现的时候,vector中的元素的内存必须是连续的。所以对于插入和删除的时间复杂度是很高的,因为删除或者插入的时候,需要元素的移动,即元素复制拷贝。

vector的内部实现一般需要用到placement new ,所以效率很高,因为很多的时候,只要我们是使用得到,就可以省去很多的内存分配开销。而且vector的使用,元素可以没有默认的构造函数,但是需要拷贝构造函数的存在,这是使用CArray所无法实现的。

使用原则:

  1. 尽量使用vector代替C风格的数组或者CArray;
  2. 尽量使用算法代替手工写的循环;
  3. 尽量使用vector本身的函数代替其他泛型算法;

vector的接口很容易看懂和使用,这里以一些例子来说明vector的用法。

1,填充vector

如果我们想用原始数组的内容填充vector,那么于有很多种方式。我们来一次学习vector的几个方法。

例如我们有数组int  v1[10] = {0,1,0,0,3,0,0,4,4,4};

初始化方式1:

[cpp]
vector<int> v2(10); //初始化size为10可以避免数组动态增长的时候不断的分配内存
//v2.reserve(10);//同上,只要使用其中一个就可以了
for( int i=0; i<10; i++ )
{
v2.push_back(v1[i]);//增加一个元素
}
[/cpp]

初始化方式2:

[cpp]vector<int> v3(&v1[0],&v1[9]);//原始数组的元素指针可以作为迭代器来使用[/cpp]

初始化方式3:

[cpp]
vector<int> v4;
v4.reserve(10);
v4.insert(v4.begin(), &v1[0], &v[9]);
[/cpp]

初始化方式4:

[cpp]
vector<int> v5(10);
copy(v5.begin(), &v1[0], &v1[9]);
[/cpp]

原始数组的元素指针可以作为迭代器来使用。

原则:尽量使用reserve来减少不必要的内存分配次数。

原则:尽量使用empty而不是size()==0 来判断容器是否为空

有可能我们需要在vector中插入相应的元素

[cpp]
vector<int>::iterator i = find( v1.begin(), v1.end(), 3);
if( i != v1.end() )
{
v1.insert( i, 6 );
}
[/cpp]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值