式:コンテナ内から要素を削除する際に、ベクトルイテレータをインクリメントできないエラーが発生しました



Expression Vector Iterator Not Incrementable Error Deleting Element From Inside Container



今日、コンテナを使用して要素を削除すると、ランタイムエラーが発生します

auto it1 = ivec.begin() while (it1 != ivec.end()){ if (*it1 % 2 == 0) ivec.erase(it1) ++it1 }

コンテナの消去操作を初めて使用する数行のコードでは、コンテナが満たされている場合、コンテナを最初から最後までトラバースすることを目的としています。
* it1%2 == 0で操作を実行し、it1ポインターを次の要素に増やすと、結果はエラーになります。
画像



私は消去を注意深く研究しました、 削除された要素の後のイテレータを指すeraseには戻り値があることがわかりました 。そして実行します 消去後、削除ポイントの後のイテレータ、参照、およびポインタが無効になります 、したがって、++ it1を実行するとエラーが発生します。
将来的には、コンテナによってイテレータが失敗するさまざまな状況に特別な注意を払う必要があります。
したがって、正しいアプローチ:

auto it1 = ivec.begin() while (it1 != ivec.end()){ if (*it1 % 2 == 0) it1=ivec.erase(it1) //Note here ++it1 }

参照: https://blog.csdn.net/keyboardfucker/article/details/52069066