#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++;
}