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


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM