vector iterator not incrementable For information on how your program can cause an an assertion Failure, see the Visual c++ documentation on asserts

938 ワード

#include <list>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    list<int> slist;
    list<int>::iterator iter;
        slist.push_back(1);
        slist.push_back(5);
    slist.push_back(11);
    for(iter = slist.begin(); iter != slist.end(); ++iter)
    {
        if(11 == *iter)
            slist.erase(iter);
    }
    return 0;
} 


問題(vector iterator not incrementable For information on how your program can cause an assertion Failure,see the Visual c++documentation on asserts.(Press Retry to debug the application)という比較的典型的で、削除された要素が一番後ろでない場合、あまり問題はありません.VS 2008でこれを実行し、slist.erase(iter);削除する要素がslistの最後の要素である場合、eraseを実行するとiterがendを指し、再びforループに入り、++iterを実行中にエラーが発生します.の(eraseは反復器が無効になります)
デフォルトではconst iteratorでこのエラーが発生します.
と判断
if(it!=m_Bullsts.end()/反復器失効{it+;}