0

次のコードでアサーション エラーが発生するのはなぜ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();
}
4

4 に答える 4

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);
}
于 2012-12-02T17:37:45.187 に答える
0

消去iterすると無効になります。無効なイテレータは、それらに割り当てる以外の目的には使用できず、他のものと比較することさえできないと思います。あなたは使いたかったかもしれません

iter = a.end();
于 2012-12-02T17:40:26.007 に答える
0

消去後、イテレータは無効になります。あなたの場合、最後の要素を削除していたので、erase自体は終了イテレータを返します(あなたはそれをドロップします)

于 2012-12-02T17:41:40.137 に答える
0

特定のコレクションの反復子は、要素を削除するなどして変更するaと無効になります。a

于 2012-12-02T17:36:22.537 に答える