2012-12-02 54 views
0

爲什麼下面的代碼產生的斷言錯誤:Expression: list iterators incompatibleSTL迭代器:斷言錯誤

#include <list> 
using namespace std; 

int main() 
{ 
    list<int> a; 
    a.push_back(1); 
    list<int>::iterator iter=a.begin(); 
    a.erase(iter); 

    iter==a.end(); 
} 
+0

這本來是很好,如果你寫的'ITER = a.end()結束迭代'因爲你已經取代了無效的迭代器,但因爲你寫的'ITER == a.end()'你是比較一個無效的迭代器導致不兼容的警告 –

回答

1

你想要做的是什麼:

#include <list> 
using namespace std; 

int main() 
{ 
    list<int> a; 
    a.push_back(1); 
    list<int>::iterator iter=a.begin(); 
    iter = a.erase(iter); 
} 
0

上的給定集合a的迭代器變得無效時a改變,例如通過刪除一個元素。

+2

這並不是在所有類型的容器的所有迭代器真的。 – juanchopanza

+0

哪種類型的容器不是真的? –

+0

你可以'pop_back()''我的std :: VECTOR'收集了''沒有我的迭代器,指向某處的中間'了'慢半拍。等等。 –

0

當擦除iter它被認爲是無效的。我認爲無效的迭代器不能用於分配給它們以外的任何東西,甚至不會將它們與任何東西進行比較。您可能想要使用

iter = a.end(); 
0

迭代器在擦除後無效。你的情況擦除自己返回(你把它),你被刪除的最後一個元素