C++中遍历删除vector指定值元素不能直接用erase(),否则会跳过下一元素;推荐使用erase-remove惯用法,或手动控制迭代器(erase返回新迭代器),避免for循环中边遍历边erase。

在 C++ 中,不能直接用 erase() 遍历删除 vector 中的指定值元素,否则会跳过下一个元素(因为删除后后续元素前移,而迭代器继续前进)。正确做法是使用 erase–remove 惯用法(Erase-Remove Idiom),或手动控制迭代器。下面给出几种常用、安全、高效的方案。
利用 std::remove 将所有匹配元素“挪到末尾”,再用 erase 一次性删掉它们。注意:remove 不真正删除,只重排;erase 才真正收缩 size。
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int>
; v = {1, 2, 3, 2, 4, 2, 5};
// 删除所有值为 2 的元素
v.erase(std::remove(v.begin(), v.end(), 2), v.end());
// 输出: 1 3 4 5
for (int x : v) std::cout << x << " ";
}
当需要按条件删除(如删除所有偶数、大于 10 的数等),用 std::remove_if + lambda:
true 表示“要被移除”erase 完成真实删除// 删除所有偶数
v.erase(std::remove_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; }), v.end());
如果删除过程中需要访问被删元素、计数、或 break 退出,可用 while 循环 + erase 返回的迭代器(它指向被删元素的下一个):
立即学习“C++免费学习笔记(深入)”;
Fotor AI Image Upscaler
Fotor推出的AI图片放大工具
73
查看详情
auto it = v.begin();
while (it != v.end()) {
if (*it == 2) {
it = v.erase(it); // erase 返回下一个有效迭代器
} else {
++it;
}
}
⚠️ 注意:不要写 it++ 后再 erase(it),那会越界;必须用 erase 的返回值更新 it。
以下代码会导致漏删或越界:
for (int i = 0; i → i 递增但元素前移,跳过下一个for (auto it = v.begin(); it != v.end(); ++it) if (*it == 2) v.erase(it); → erase 后 it 失效,再 ++it 是未定义行为基本上就这些。日常优先用 erase-remove;需要动态逻辑时用 while + erase 返回值。两者都安全、标准、无隐患。
以上就是C++如何删除vector中的指定元素?(代码示例)的详细内容,更多请关注其它相关文章!
# 管理机制
# 租房关键词搜索排名
# 广安网站建设广安
# 电子信息工程网站建设
# 市场推广营销招聘
# 吉林SEO顾问
# 白银市的网站建设
# 顺昌网站seo公司
# 鞋帽类网站建设
# 搜狗网络推广营销费用
# easyhits4u 推广 网站
# 返回值
# 多路
# go
# 如何实现
# 何为
# 则会
# 跳过
# 都是
# 遍历
# 迭代
# stream
# ios
# c++
# ai
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
《360浏览器》自动保存账号密码设置方法
《爱笔思画x》涂色教程
CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程
电脑开不了机怎么办 电脑无法开机的解决方法
海棠阅读登录教程_详细讲解海棠登录操作
Python中深度嵌套字典与列表的数据提取与条件过滤指南
5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备
怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】
HTML中多图片上传与预览:解决ID冲突的专业指南
iPhone12是否要更新ios16
Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案
嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】
使用CSS :has() 选择器实现父元素样式控制:从子元素反向应用样式
12306售票时间最新规定 | 网上订票和车站窗口时间一样吗
漫蛙manwa2网页版书签同步链接_漫蛙manwa多设备登录入口
QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航
小米手机截图后如何查看历史_小米手机截图历史记录查看方法
《海贝音乐》均衡器设置方法
MySQL多重JOIN技巧:高效关联同一表获取多角色信息
被称为海蜈蚣的海洋动物是
如何在mysql中使用索引提示_mysql索引提示优化方法
《鹿路通》退余额方法
J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略
掌握Go App Engine项目结构与GOPATH:包管理与导入实践
qq音乐官方网站入口_qq音乐在线听歌网页版链接
苹果如何下载nanobanana
《糖豆》添加舞曲方法
mysql如何限制远程访问_mysql远程访问限制方法
LINUX怎么查看显卡信息_LINUX查看GPU状态
解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用
谷歌浏览器怎么把网页翻译成中文_Chrome网页翻译功能使用方法
C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器
Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程
sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程
百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法
惠普电脑BIOS界面看不懂怎么办_HP电脑BIOS功能选项解读与设置
哔哩哔哩在线观看入口 B站官网免费进入
小红书网页版首页入口 小红书网页版电脑端官方登录链接
汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口
电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】
Highcharts雷达图轴线交点数值标注指南
vivo浏览器怎么离线保存网页 vivo浏览器下载完整页面以便无网络时阅读
Animex动漫社社登录官网 Animex动漫社资源社入口直达
圆通快递官网入口查询单号 手机版官方查询入口
解决SQLAlchemy模型跨文件关联的Linter兼容性指南
C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树
Mac hosts文件在哪里_Mac修改hosts文件详细教程
Yandex浏览器官方入口_Yandex搜索引擎中文版
mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程
J*aScript二进制处理_ArrayBuffer与Blob
2025-12-18
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。