首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++迭代器有关问题(或许)

2013-03-14 
C++迭代器问题(或许)不知道这是不是STL里面的bug。去掉该句注释就不会有问题//itrnums.begin()希望大神解

C++迭代器问题(或许)
不知道这是不是STL里面的bug。去掉该句注释就不会有问题//itr=nums.begin();  
希望大神解惑

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

using namespace std;
void print_vector(vector<int> vec);  
int main(){

   // cout<<"hello world"<<endl;
vector<int> nums;
while(true)
{
string str;
getline(cin,str);
    istringstream input(str);
int temp_int; 
while(input>>temp_int)
nums.push_back(temp_int);
    //  print_vector(nums);
        getline(cin,str);
istringstream line2(str);
        
    vector<int>::iterator itr=nums.begin(); 
while(line2>>temp_int)
{
//itr=nums.begin();    //加上该语句不会有问题
while(itr!=nums.end()&&*itr<temp_int)
{
   printf("地址:%d %d\n",itr,*itr);
itr++;
}
if(itr==nums.end())
nums.push_back(temp_int);
else{
nums.insert(itr,temp_int);
}
//cout<<*itr<<endl; 
print_vector(nums); 
}
cout<<endl;
//print_vector(nums);
cout<<nums.at((nums.size()-1)/2)+1<<endl;
nums.clear();
}
    system("pause"); 
return 0;
}
void print_vector(vector<int> vec){
vector<int>::iterator tempitr=vec.begin();
while(tempitr!=vec.end())
{
cout<<*tempitr<<" ";
tempitr++;
}
cout<<endl;
}

[解决办法]
while中的某些操作使迭代器失效了,所以需要重新赋值才会正确
[解决办法]
 nums.push_back(temp_int);

nums.insert(itr,temp_int);
会造成itr失效。所以再次使用itr的时候就出错了。
加上itr=nums.begin();之后每次循环都重新获取了,就正确了
[解决办法]
那些使迭代器失效的操作一般会返回一个新的迭代器值来替代失效的那个。

热点排行