爲什麼下面的代碼產生的斷言錯誤:Expression: list iterators incompatible
?STL迭代器:斷言錯誤
#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();
}
爲什麼下面的代碼產生的斷言錯誤:Expression: list iterators incompatible
?STL迭代器:斷言錯誤
#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();
}
你想要做的是什麼:
#include <list>
using namespace std;
int main()
{
list<int> a;
a.push_back(1);
list<int>::iterator iter=a.begin();
iter = a.erase(iter);
}
上的給定集合a
的迭代器變得無效時a
改變,例如通過刪除一個元素。
這並不是在所有類型的容器的所有迭代器真的。 – juanchopanza
哪種類型的容器不是真的? –
你可以'pop_back()''我的std :: VECTOR'收集了''沒有我的迭代器,指向某處的中間'了'慢半拍。等等。 –
當擦除iter
它被認爲是無效的。我認爲無效的迭代器不能用於分配給它們以外的任何東西,甚至不會將它們與任何東西進行比較。您可能想要使用
iter = a.end();
迭代器在擦除後無效。你的情況擦除自己返回(你把它),你被刪除的最後一個元素
這本來是很好,如果你寫的'ITER = a.end()結束迭代'因爲你已經取代了無效的迭代器,但因爲你寫的'ITER == a.end()'你是比較一個無效的迭代器導致不兼容的警告 –