Expression:vector iterator not incrementable 从容器内部删除元素出错

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/p1126500468/article/details/80318902

今天使用容器删除元素操作时出现runtime error

auto it1 = ivec.begin();
    while (it1 != ivec.end()){
        if (*it1 % 2 == 0)
        ivec.erase(it1); 
        ++it1;
    }

几行代码,第一次使用容器的erase删除操作,本意是从头到尾遍历一遍容器,如果满足
*it1 % 2 == 0的条件就执行操作,并且将it1指针加一指向下一元素,结果报错:
这里写图片描述

仔细研读了一下erase,发现erase有个返回值,指向删除的元素的后一个位置的迭代器。并且执行erase后会导致删除点以后的迭代器、引用和指针都会失效,所以运行到++it1就出错了。
以后应特别注意容器会引起迭代器失效的各种情况。
所以正确做法:

auto it1 = ivec.begin();
    while (it1 != ivec.end()){
        if (*it1 % 2 == 0)
        it1=ivec.erase(it1); //注意此处
        ++it1;
    }

参考:https://blog.csdn.net/keyboardfucker/article/details/52069066

猜你喜欢

转载自blog.csdn.net/p1126500468/article/details/80318902