#include <iostream>
#include <iterator>//使用back_inserter
#include <algorithm>
#include <vector>
using namespace std;
void main()
{
vector<int> ivec;
try
{
fill_n(ivec.begin(),10,1);//error should use fill_n (back_inserter(ivec), 10, 1);
for(vector<int>::iterator itbegin=ivec.begin(),itend=ivec.end();itbegin!=itend;++itbegin)
cout<<*itbegin<<endl;
}
catch (runtime_error err)
{
cerr << "Error: "<<err.what()<<endl;
}
catch(out_of_range or)
{
cerr << "Error: "<<or.what()<<endl;
}
catch(exception ex)
{
cerr << "Error: "<<ex.what()<<endl;
}
}
解决方法:fill_n()函数将在vector中从头开始,将指定个数的元素设置为给定的值。fill_n函数假定对指定数量的元素做写操作是安全的。初学者常犯的错误的是:在没有元素的空容器上调用 fill_n 函数,因此需要使用back_inserter ,这种插入迭代器。当使用插入迭代器赋值时,则会在容器中添加一个新元素,其值等于赋值运算的右操作数的值。因此需将代码改为:
fill_n (back_inserter(ivec), 10, 1);