为什么会出现运行时错误:矢量擦除迭代器超出范围

Dan*_*nze 5 c++ stl stdvector c++11

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

错误说:

向量擦除迭代器超出范围

截屏

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

Ara*_*ash 6

正确的形式是

mylist.erase(
    std::remove_if(mylist.begin(),mylist.end(),lambda),
    mylist.end());
Run Code Online (Sandbox Code Playgroud)

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