2012-07-10 92 views
0

我想通過對向量進行搜索,並以做so..i正在做以下幾點:問題陷入到無限循環在遍歷向量

vector<pair<double ,double> > vec_pairs; 

for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++) 
     { 
      if(vec_pairs[j].first==12.6) 
      { 
       int z=7; 
       continue; 
      } 
     } 

但我的問題是..這樣做...我陷入了一個無限循環... 任何人都可以幫助我解決問題

+0

嘗試將'j!= vec_pairs.size()'更改爲'j SingerOfTheFall 2012-07-10 06:07:03

+0

@SingerOfTheFall我嘗試過,但仍然陷入無限循環 – 2012-07-10 06:07:37

+1

你可以發佈「if」代碼嗎? – SingerOfTheFall 2012-07-10 06:08:11

回答

0

首先,您發佈的代碼可以很好地「保持原樣」。

這種類型的代碼進入無限循環的唯一原因是在循環內修改j

如果增加j在循環中,你可能會被卡住,因爲你會走出去的債券,並有可能你的代碼崩潰。

for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++) 
    { 
     if(vec_pairs[j].first==12.6) 
     { 
      j++;//You will go out of vector bonds and might get an error here. 
      continue; 
     } 
    } 

但是,如果你做這樣的事情:

for(vector<unsigned int>::size_type j = 0; j != vec_pairs.size(); j++) 
    { 
     if(vec_pairs[j].first==12.6) 
     { 
      j--;//j is decreased each time you get in here, so you will be stuck on one element, 
      continue; 
     } 
    } 

然後你會卡住內,因爲當你進入if聲明(比如,要素7),j將下降到6,然後你會continue的循環,j會增加回7,你會再次進入if裏面,依此類推。

+0

*「你將離開矢量債券並得到一個錯誤」* - 什麼樣的錯誤?訪問一個向量越界是未定義的行爲,所以你不能確定會發生什麼。 – 2012-07-10 06:19:30

+0

@BenjaminLindley,是的,但最終你的程序很可能會崩潰。例如,我有一個段錯誤。然而,你有你的觀點,我會在答案中加入「might」,thx。 – SingerOfTheFall 2012-07-10 06:21:44

+0

std ::向量運算符[]不檢查索引邊界(在()那麼做)。在沒有內存保護的機器上(嵌入式設備),增加j也會導致無限循環。 – 2012-07-10 06:22:30

0

我已經在鍵盤上測試過你的代碼。檢查它here!它工作正常。調試時檢查變量j的值。正如SingerOftheFall所說,它可能會減少或重置某處。如果要在循環內添加增加vec_pairs.size()值的元素並且條件j != vec_pairs.size()在此情況下永遠不會成立,它也可以進入無限循環。在給出的代碼中找不到任何錯誤。