2015-05-29 51 views
-1

我有一個列表迭代器不能增量的問題 我有一個鄰接矩陣「adj(2d向量)」+我有一個字符向量的名稱顏色,我有一個int glist 我「M具有用下面的函數微軟VS C++ 2010列表迭代器錯誤

for(list<int>::iterator it = glist.begin(); it != glist.end(); it++) 
    { 
     int x =0; 
    for(int i=0;i<adj.at(*it).size();i++){ 
     if(color.at(adj.at(*it).at(i)) == 'w') 
     x++; 
    } 
     if(x == 0) 
     { 
      it = glist.erase(it); 
     } 
    } 

我從該函數要的是測試一個問題,如果每個elemnt在爲Glist HASE鄰居與白色的neghbors(即,在顏色矢量相鄰的顏色= =「w」,如果它不然後deltet元素從glist ,但是當我編譯列表迭代器不可增量錯誤顯示 任何幫助將升值ated

+0

,如果任何人希望我張貼整個代碼只是告訴我,我會發帖 – amira

+1

你有沒有聽說過a)縮進和b)標點符號?你的代碼和問題都不可讀,請改進。 –

+0

對不起,如果我的問題沒有形成,我會盡力改善它下一次 – amira

回答

1

當您擦除項目時,您的邏輯會跳過列表中的一個項目。

假設你有:

1 5 15 222 
在列表

。假設您從列表中刪除5。該行:

if(x == 0) 
{ 
    it = glist.erase(it); 
} 

會讓it15。並且您在for行中執行++it,這使得it指向222。這意味着你跳過了處理15

如果你最終刪除222,該行:

if(x == 0) 
{ 
    it = glist.erase(it); 
} 

會讓itglist.end()。當你做++it時,你會看到未定義的行爲。

更改你的邏輯通過更新it

if(x == 0) 
{ 
    it = glist.erase(it); 
} 
else 
{ 
    ++it; 
} 

,改變for行:

for(list<int>::iterator it = glist.begin(); it != glist.end(); /* it++ /*) 
                   // ^^^^ Don't need. 
+0

謝謝你解決了這個問題 – amira