fatal error "vector iterator + offset out of range" "standard C++ libraries out of range"

清泛原创
代码如下:
#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);

C++ vector

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部