c++如何删除vector中的指定元素_c++ vector erase用法【实战】
发布时间 - 2026-01-24 00:00:00 点击率:次vector::erase 删除单个元素需配合迭代器,不能直接传值;正确做法是先用 std::find 查找再 erase,并检查迭代器有效性;批量删用 remove-erase 惯用法;按条件删用 remove_if;注意迭代器失效与性能陷阱。
vector::erase 删除单个元素要配合迭代器使用
直接用 erase 删除某个值(比如数字 5)会失败,因为 erase 不接受值参数,只接受迭代器。常见错误是写成 v.erase(5),这会删掉第 5 个位置的元素,不是值为 5 的元素。
正确做法是先用 std::find 找到目标值的迭代器,再传给 erase:
auto it = std::find(v.begin(), v.end(), 5);
if (it != v.end()) {
v.erase(it);
}
- 必须检查
it != v.end(),否则对未找到的end()调用erase是未定义行为 -
erase返回被删除元素后一个位置的迭代器(C++11 起),可用来继续遍历,但单删时通常不需要 - 删除后,原迭代器失效,后续不能再用
it访问或递增
一次性删除所有匹配值要用 remove-erase 惯用法
想删掉 vector 中所有值为 5 的元素?不能循环调用 find + erase,因为每次 erase 都会移动后续元素,导致迭代器失效、漏删或越界。
标准解法是 std::remove + erase 组合:
v.erase(std::remove(v.begin(), v.end(), 5), v.end());
-
std::remove不真正删除,只是把不匹配的元素前移,并返回新逻辑结尾的迭代器 -
erase接收这个迭代器和v.end(),批量擦除“被覆盖”区域(即原末尾多余部分) - 该操作时间复杂度 O(n),只遍历一次,比反复查找+删除高效且安全
按条件删除(比如大于 10 的元素)得用 remove_if
当删除逻辑无法用等值判断(如“删掉所有偶数”“删掉长度小于 3 的字符串”),就得换 std::remove_if:
v.erase(std::remove_if(v.begin(), v.end(), [](int x) { return x > 10; }), v.end());
- lambda 或函数对象返回
true的元素会被“移走”,最终由erase清理 - 注意:
remove_if同样不改变容器大小,必须配erase才真正收缩内存 - 如果需要保留原始顺序,这个方法天然满足;若顺序无关,有时用反向遍历 + 单次
erase更直观(但 remove_if 更通用)
删除时要注意迭代器失效和性能陷阱
erase 对 vector 来说开销不小——它会把被删元素之后的所有元素向前复制。频繁在头部或中间删除,性能会明显下降。
- 在尾部删除用
pop_back(),O(1),不涉及移动 - 需高频随机删除时,考虑换
std::list或std::deque(但失去随机访问) - 用索引循环删除(如 for(int i=0; i
- 用正向迭代器循环删除也危险,除非你手动管理迭代器(如
it = v.erase(it)),但不如 remove-erase 简洁可靠 - 用正向迭代器循环删除也危险,除非你手动管理迭代器(如
真正容

capacity())不变。如果删了大量元素又不再添加,可以用 std::vector(v).swap(v) 或 C++11 的 v.shrink_to_fit()(后者是请求,不保证成功)来回收内存。
# c++
# for
# 字符串
# int
# 循环
# Lambda
# 值参数
# 对象
# 迭代
# 遍历
# 先用
# 值为
# 的是
# 不需要
# 可以用
# 要用
# 就得
# 又不
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
清除minerd进程的简单方法
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何在IIS管理器中快速创建并配置网站?
如何在阿里云ECS服务器部署织梦CMS网站?
Linux系统命令中screen命令详解
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
javascript基于原型链的继承及call和apply函数用法分析
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
高端企业智能建站程序:SEO优化与响应式模板定制开发
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
高端建站三要素:定制模板、企业官网与响应式设计优化
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel如何为API生成Swagger或OpenAPI文档
常州企业网站制作公司,全国继续教育网怎么登录?
如何在Ubuntu系统下快速搭建WordPress个人网站?
在线教育网站制作平台,山西立德教育官网?
在线制作视频的网站有哪些,电脑如何制作视频短片?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Laravel如何使用withoutEvents方法临时禁用模型事件
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
网站图片在线制作软件,怎么在图片上做链接?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Python高阶函数应用_函数作为参数说明【指导】
如何在IIS7上新建站点并设置安全权限?
网站优化排名时,需要考虑哪些问题呢?
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
非常酷的网站设计制作软件,酷培ai教育官方网站?
公司门户网站制作流程,华为官网怎么做?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
node.js报错:Cannot find module 'ejs'的解决办法
西安专业网站制作公司有哪些,陕西省建行官方网站?
打造顶配客厅影院,这份100寸电视推荐名单请查收
Laravel如何使用Sanctum进行API认证?(SPA实战)
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】

