2015-09-22 270 views
0

我使用Visual Studio 2008:循环访问向量迭代无限

我想通过迭代器遍历一个向量itrv但它进入某种原因死循环: 错误:

ERROR表达:地图/套迭代器不递增的

代码:

int main(
{ 
    set<int> s1; 
    set<int>::iterator itr; 
      s1.insert(43); 
      s1.insert(42); 
      s1.insert(41); 
      s1.insert(3); 
      s1.insert(2); 
      s1.insert(1); 


    vector<int> vec; 
    vector<int>::iterator itrv=vec.begin(); 

    for(itr=s1.begin();itr!=s1.end();++itr) 
    { 
     cout<<*itr; 
     vec.push_back(*itr); 
     cout<<endl; 
    } 

     cout<<"so the size of vector is SIZE : "<<vec.size()<<endl; //i get 6 here 

//PROBLEM IN THIS LOOP. GOES TO INFINITE LOOP AND PRINTS JUST '1' INFINITELY 
     for(itrv=vec.begin();itrv!=vec.end();++itr) 
     { 
      cout<<*itrv<<endl; 
     } 

我甚至尝试使用下标打印矢量的元素,它打印得很好。 但随着迭代失败:

cout<<vec[0]<<endl; 
cout<<vec[1]<<endl; 
cout<<vec[2]<<endl; 
cout<<vec[3]<<endl; 
cout<<vec[4]<<endl; 
cout<<vec[5]<<endl; 
cout<<"with itrv \n"; 
itrv=vec.begin(); 
cout<<*itrv;itr++; 
cout<<*itrv;itr++; 
cout<<*itrv;itr++; 
cout<<*itrv;itr++; 
cout<<*itrv;itr++; 
cout<<*itrv;itr++; 
+1

我想你想使用'++ itrv'而不是'++ itr'。 – Default

+0

@Default:看我的循环,我preincrementing。 – anurag86

+0

我试过的编译器对此并不警惕,但是静态分析器可能会这样。不幸的是,Coliru没有扫描构建。 – chris

回答

4
for(itrv=vec.begin();itrv!=vec.end();++itr) 

应该

for(itrv=vec.begin();itrv!=vec.end();++itrv) 

否则,itrv没有被感动,itrv != vec.end()总是如此,每当vec不是空的。

+0

天啊!这样一个愚蠢的错误,我一直试图找出它很长一段时间:(((。谢谢 – anurag86

+0

永远不会命名两个变量名称非常相似 – timrau

+0

好眼睛!这很难让我发现!不同的变量名称会保持简单发生的错误。 – pistachiobk