c++ - 为什么会出现运行时错误:向量擦除迭代器超出范围
问题描述
对于以下代码,我遇到了一个奇怪的运行时错误:
#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;
}
错误说:
向量擦除迭代器超出范围
解决方案
正确的形式是
mylist.erase(
std::remove_if(mylist.begin(),mylist.end(),lambda),
mylist.end());
您也需要将 传递end
给擦除。
推荐阅读
- linux - 如何在 Yocto 发行版上创建交换分区/文件
- java - 使用令牌交换模拟 Keycloak
- android - Android 页面不使用 RxPagingSource 中的 adapter.refresh() 刷新
- airflow - 用于简单频繁 DAG/任务的 Apache Airflow 基准测试?
- python - 如何使用 openpyxl 保存 excel 文件并按原样保留数据透视表?
- docker - Docker 登录成功,但没有拉或推被拒绝
- geometry - Threejs聚光灯通过网格问题
- javascript - javascript setTimeout在while循环中
- r - 从每日数据中删除时间段
- python-3.x - 将脚本从 jira 服务器迁移到云 - 现在无法登录