首页 > 解决方案 > 为什么会出现运行时错误:向量擦除迭代器超出范围

问题描述

对于以下代码,我遇到了一个奇怪的运行时错误:

#include <algorithm>
#include <vector>

using std::vector;

struct Data
{
    int id;
};

int main()
{
    vector<Data> mylist;

    Data m;
    m.id = 10;

    mylist.push_back(m);

    mylist.erase(std::remove_if(
        mylist.begin(),
        mylist.end(),
        [](const Data &m) {
        return m.id>100;
    }));

    return 0;
}

错误说:

向量擦除迭代器超出范围

截屏

我不是在解决像Ref1Ref2这样的问题,而是意识到问题的原因以及我是否做错了什么。

标签: c++c++11stlstdvector

解决方案


正确的形式是

mylist.erase(
    std::remove_if(mylist.begin(),mylist.end(),lambda),
    mylist.end());

您也需要将 传递end给擦除。


推荐阅读