次のコードでアサーション エラーが発生するのはなぜExpression: list iterators incompatible
ですか?
#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);
}
消去iter
すると無効になります。無効なイテレータは、それらに割り当てる以外の目的には使用できず、他のものと比較することさえできないと思います。あなたは使いたかったかもしれません
iter = a.end();
消去後、イテレータは無効になります。あなたの場合、最後の要素を削除していたので、erase自体は終了イテレータを返します(あなたはそれをドロップします)
特定のコレクションの反復子は、要素を削除するなどして変更するa
と無効になります。a