Why do I get a runtime error: Vector erase iterator outside range
Why do I get a runtime error: Vector erase iterator outside range
我遇到了以下代码的奇怪运行时错误:
#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;
}
错误说:
Vector erase iterator outside range
我不是像, Ref2那样解决了问题,而是意识到了问题的原因,是否做错了什么
在上面的例子中,remove_if 函数模板将 return 一个无效的迭代器。现在,根据 std::vector::erase 的文档,迭代器 pos 必须有效且可取消引用,这在您的情况下是无效的,因此会抛出断言消息。
或者,您可以只提供 end() 迭代器作为 std::vector::erase 函数的第二个参数或使用 std::vector:: pop_back 从向量中弹出元素。
正确的形式是
mylist.erase(
std::remove_if(mylist.begin(),mylist.end(),lambda),
mylist.end());
您也需要将 end
传递给擦除。
我遇到了以下代码的奇怪运行时错误:
#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;
}
错误说:
Vector erase iterator outside range
我不是像
在上面的例子中,remove_if 函数模板将 return 一个无效的迭代器。现在,根据 std::vector::erase 的文档,迭代器 pos 必须有效且可取消引用,这在您的情况下是无效的,因此会抛出断言消息。
或者,您可以只提供 end() 迭代器作为 std::vector::erase 函数的第二个参数或使用 std::vector:: pop_back 从向量中弹出元素。
正确的形式是
mylist.erase(
std::remove_if(mylist.begin(),mylist.end(),lambda),
mylist.end());
您也需要将 end
传递给擦除。