2015-09-22 249 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