新闻中心

c++ vector删除元素 c++ vector erase用法

2025-11-26
浏览次数:
返回列表
答案:vector的erase函数用于删除指定位置或范围元素,返回指向删除后下一元素的迭代器;可结合find删除特定值,推荐使用remove-erase惯用法删除满足条件的多个元素,注意迭代器失效与性能影响。

c++ vector删除元素 c++ vector erase用法

在C++中,vector 是一个动态数组容器,支持在运行时动态添加和删除元素。要删除 vector 中的元素,最常用的方法是使用 erase() 函数。下面详细介绍 erase 的用法以及一些常见操作。

erase() 基本语法

erase() 函数用于删除 vector 中指定位置或范围的元素,有以下两种主要形式:

  • iterator erase(iterator pos); —— 删除单个元素
  • iterator erase(iterator first, iterator last); —— 删除一个区间内的多个元素

函数返回值是一个迭代器,指向被删除元素之后的下一个元素。

删除单个元素

如果你想删除 vector 中某个特定位置的元素,比如第2个元素(索引为1),可以这样做:

vector vec = {10, 20, 30, 40};
vec.erase(vec.begin() + 1); // 删除索引为1的元素(即20)
// 现在 vec 内容为 {10, 30, 40}

删除一段范围的元素

你也可以删除从某个起始位置到结束位置之间的所有元素:

美图云修 美图云修

商业级AI影像处理工具

美图云修 50 查看详情 美图云修 vector vec = {10, 20, 30, 40, 50};
vec.erase(vec.begin() + 1, vec.begin() + 4); // 删除 [1, 4) 范围内元素
// 即删除 20, 30, 40 → 结果为 {10, 50}

结合 find 删除指定值的元素

如果想删除某个具体值(例如删除所有等于30的元素),通常需要配合 std::find循环 + 条件判断 使用。但注意:find 只能找到第一个匹配项。

#include gorithm>
vector vec = {10, 20, 30, 40};
auto it = std::find(vec.begin(), vec.end(), 30);
if (it != vec.end()) {
  vec.erase(it); // 找到后删除
}
// vec 变为 {10, 20, 40}

删除所有满足条件的元素(推荐使用 remove-erase 惯用法)

如果你要删除多个相同值或满足某种条件的元素,直接用 erase 配合循环可能出错(因为迭代器失效)。推荐使用 remove-erase 惯用法

vec.erase(std::remove(vec.begin(), vec.end(), 30), vec.end());
// 删除所有等于30的元素

或者使用 lambda 表达式删除满足条件的元素:

vec.erase(
  std::remove_if(vec.begin(), vec.end(), [](int n) { return n > 30; }),
  vec.end()
);
// 删除所有大于30的元素

注意事项

  • erase 会改变 vector 大小,并使被删除位置之后的所有迭代器失效
  • 对空位置调用 erase 会导致未定义行为,使用前应确保迭代器有效
  • 频繁在中间删除元素效率较低(O(n)),因后续元素需前移;如需高频删改,考虑 list 或 deque
基本上就这些。掌握 erase 和 remove-erase 惯用法,就能高效处理 vector 元素删除问题。

以上就是c++++ vector删除元素 c++ vector erase用法的详细内容,更多请关注其它相关文章!


# 如何选择  # 网络营销和运营推广  # 信阳快照seo推广  # 企业全网营销品牌推广  # 漱口水营销推广策略产品  # 许昌网站推广优化怎么选  # 定西seo公司解答火星  # 银行小程序推广营销案例  # 深圳医疗seo招聘  # 嵩明网站建设联系方式  # title标签在seo如何优化  # 如何实现  # 删除元素  # 文件系统  # 尼克  # 数据结构  # 是一个  # 推荐使用  # 多个  # 美图  # 迭代  # c++  # go 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Mac怎么锁定备忘录_Mac备忘录加密设置教程  理解J*aScript Promise的微任务队列与执行顺序  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  微信语音通话掉线如何解决 微信语音通话稳定优化方法  J*aScript生成器_j*ascript异步迭代  探索高级语言到C/C++的转译路径:以Go为例及内存管理策略  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  Python字典中优雅地迭代剩余元素的方法  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  Promise错误处理:在catch后终止链式then执行的策略  PHP中高效并行检查多链接状态的教程  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  yandex入口引擎手机版 yandex安卓版下载入口  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  微信网页版官方快速登录入口 微信网页版网页版账号直达  Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题  Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法  excel怎么制作工资条 excel快速生成工资条的方法  AO3中文官网链接_AO3网页版稳定镜像站  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  菜鸟取件码是什么怎么查 最全查询渠道汇总  Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  痛风发作了怎么办? 快速止痛和后期饮食调理  Shopware订单对象中获取产品自定义字段的正确方法  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  Python中高效访问嵌套字典与列表中的键值对  必由学官网快捷入口 必由学网页版在线学习平台  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  《燕云十六声》两周内达九百万玩家!位居畅销榜第五  内存疯狂猛猛涨价:主板销量直接腰斩!  《主播少女的秘密账号迷宫》首支宣传片  Python类型检查:优化关联可选属性的Mypy推断策略  知音漫客官网漫画下载_知音漫客网页版阅读记录  uc浏览器网页版入口 uc浏览器网页版最新网址  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  J*aScript中赋值与自增运算符的复杂交互与执行机制  J*a编写用户注册与登录功能_掌握字符串与验证逻辑  J*aScript中针对特定容器内图片动画的实现教程  Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南  淘宝网网页版登录入口 淘宝官方网页版快捷登录  魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】  谷歌推RCS信息存档功能:公司可监控员工私密信息!  移动端XML文件怎么转换成Excel 手机和平板上的解决方案 

搜索