stl vector 内存分配

来源:百度知道 编辑:UC知道 时间:2024/06/17 15:46:12
//backins.cpp
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

int main()
{
vector<int> coll;

coll.reserve(10);

//create, back inserter for coll
// - inconvenient way
back_insert_iterator<vector<int> > iter(coll);

//insert elements with the usual iterator interface
*iter = 1;
//iter++;
*iter = 2;
//iter++;
*iter = 3;

copy(coll.begin(), coll.end(), ostream_iterator<int>(cout, " "));
cout << endl;
//create back inserter and insert elements
// - convenient way
back_inserter(coll) = 44;
back_inserter(coll) = 55;

copy(coll.begin(), coll.end(), \
ostream_iterator<int>(cout, " "));

cout << endl;

//use back inserter

这道题是出自The C++ standard libray 中的实例。
我用visual studio 2008 运行这个程序老出错(不管加不加coll.reserve(10))
但我用borland C++ Builder 2009 运行这个程序,可以顺理成章的运行(不加coll.reserve(10)也可以);
但是我检查了两个的源码,源码一模一样。郁闷???
还有,你的程序中有两处问题:
1——————#include "stdafx.h"
这个头文件没有必要这是MFC中的头文件,不是C++中的
2——————coll.reserve(10);
原例中没有,而原例中用了coll.reserve(2*coll.size());在倒数第二个copy()前用的。
因为back_inserter()的实现中要用到容器内的成员函数push_back();
当然在copy()里边也不例外,我个人认为可以不用reserve();但是为了,在copy中途coll原来的迭代器不失效(内存不够,重新分配并复制到另一块内存上去,迭代器失效),最好用reserve()进行预分配memory,尽管这种可能性很小(只有10个元素)。
我想知道你用的是什么编译器?