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