#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 an assertion Failure, see the Visual c + + documentation on asserts. (Press Retry to debug the application)
這個比較典型,當刪除的元素不是最后一個,則沒有太大問題。
VS2008下運行這個,當slist.erase(iter);當要刪除的元素是slist中的最后一個的時候,執行erase之后
iter就指向end了,再次進入for循環,執行++iter就出錯了。。。(erase會是迭代器失效)
默認的是const iterator 是會出現這種錯誤的:
判斷
if (it != m_Bullsts.end()) //迭代器失效
{
it++;
}
