2014-03-03 96 views
0
vector<int> solution; 
vector<int>::iterator col; 
vector<int>::iterator row; 
vector<int>::iterator sum; 


... 

for (row = vec.begin(); row != vec.end(); ++row) 
{ 
    sum = solution.begin(); 

    for (col = row->begin(); col != row->end(); ++col) 
    { 
     if(sum == (solution.end())) //value for solution.end() doesn't change, while vector keeps growing 
     { 
      solution.push_back(*col); 
     } 

     *sum = (*sum + *col); //leads to segfault 

     ++sum; 
    } 
} 

我想有一個條件,允許我檢查增長向量,但迭代器如何在C++中實現,因爲它不允許我這樣做。我應該使用什麼?動態大小檢查迭代器?

+1

'vector.size()'不夠嗎? – computerfreaker

+0

也許,但我不認爲你可以和它一起使用它。 sum = solution.begin + n,size是0到n之間的整數。那麼你是否建議我使用另一個變量x並在++ sum之後遞增並使用vector.size()? – user2967016

+0

你的問題還不夠清楚。 「一種可以讓我檢查成長載體的條件」聽起來好像你在試圖解決一場比賽。您可能想要使用互斥來解決該問題。另外,你可以添加'sum','solution','col'等類型聲明嗎? –

回答

0
if(sum == (solution.end())) //value for solution.end() doesn't change, while vector keeps growing 
{ 
    solution.push_back(*col); 
} 

else if(sum!=solution.end()) //<---- add this condition 
    *sum = (*sum + *col); 

*sum = (*sum + *col);即使總和達到最終結果分段錯誤,此條件仍在執行。

+0

謝謝,我真的很想知道爲什麼我得到segf – user2967016

+0

Upvote並接受.. ;-) – HadeS

+0

不能upvote(不到15代表),但我會接受。 – user2967016

1

push_back有可能使所有迭代器無效到向量中;這解釋了爲什麼當你在下一行代碼中取消*sum時會出現段錯誤。

您可以通過從begin()取得差分和push_back()後,將其添加到新的begin()重新計算sum,或者您可以使用索引,而不是迭代器。

size_t offset = sum - solution.begin(); 
solution.push_back(*col); 
sum = solution.begin() + offset;