向量Vector

vector类模板看起来像一个快速的数组,它就有数组的索引方式,而且可以动态的扩展。

为了达到高效的索引和迭代,vector将其内容作为一个连续的对象数组来维护。这样就导致除了向vector最后插入新元素外,向vector中插入一个对象是不可以接受的操作。

当vector预分配的存储空间用完后,为维护连续的对象数组,它必须在另一个地方分配新的更大的存储空间,并把已有的对象拷贝到新的空间中,然后释放之前的空间,这个效率是很低的。

当使用一个简单的指针作为迭代器时,当超出预分配空间需要重新分配空间时就会出现问题----“迭代器无效”。

#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
vector<int> vi(10, 0);
ostream_iterator<int> out(cout, " ");
vector<int>::iterator i = vi.begin();
*i = 47;
copy(vi.begin(), vi.end(), out);
cout << endl;


vi.resize(vi.capacity() + 1);
*i = 48;
                                          // Now i points to wrong memory
copy(vi.begin(), vi.end(), out);
cout<<endl;

getchar();
return 0;
}

使用Vector最安全的办法,就是一次性地填入所有元素,然后在程序的其他地方仅仅是使用它。

使用vector最有效的条件是:

(1)在开始时用reserve()分配正确的存储区,因此vector不会再重新分配存储区;

(2)仅仅在序列的后端添加或删除元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值