リストlist<x> bar
とイテレータの配列list<x>::iterator foo[100]
はすべての要素をbar.end()
で初期化しました。C++イテレータの比較アサーション失敗
私はbar
に要素を消去し、挿入し、押し戻すつもりで、bar
のいくつかの要素にポインタfoo
を格納したいと思います。私はfoo
中の位置が空であるかどうかをチェックする必要があり要素の挿入の場合:
if (foo[my_number] != bar.end())
//do something 1
else
//do something 2
私はfoo[my_number]
はすでにbar
要素を指している場合にのみエラーが発生します。 if
は、私はこのエラー(falseの場合、問題はない)だ真である:
Debug Assertion Failed!
Program: C:\Windows\system32\MSVCP120D.dll
File: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\list
Line: 289
Expression: list iterators incompatible
を私は挿入後bar.end()
は以前と同じではないことhereをお読みください。しかし、要素をプッシュバックしてbar.end
とfoo[k] = end
を比較すると、私のコードは失敗しません。しかし、bar.end
とfoo[k] = bar.begin() + p
(これはbar
要素が存在します)との比較に失敗します。
私には何が欠けていますか?どうすればこの問題を解決できますか?私は要素を挿入した後にfoo
を再現すべきですか?
無効にされたイテレータにアクセスしようとしているようです。あなたは[mcve]を見せてもらえますか? – NathanOliver
反復処理にはイテレータを使用する必要があります。ポインタはイテレータとして扱うことができるようにシンタックスを持っています。イテレータをポインタとして使用することは、通常、悪い考えです。 – molbdnilo
イテレータが指している要素を消去した場合、イテレータが無効になっている可能性があります。 – Rob