C++ vector 删除元素:erase-remove 惯用法与迭代器陷阱
vector 删除元素erase-remove 惯用法1. 问题背景2. std::remove 实际做了什么3. erase-remove 惯用法4. C20 的更简洁写法5. 遍历时删除元素6. 删除多个元素的性能7. 常见误区8. 一页速查9. 总结1. 问题背景在 vector 中删除满足条件的元素看起来像一个简单操作但初学时很容易误解 std::remove。它的名字叫 remove却不会真正改变容器大小。2. std::remove 实际做了什么std::remove 会把需要保留的元素移动到区间前部并返回新的“逻辑结尾”。尾部仍然存在只是内容处于未指定状态。#includealgorithm#includevectorstd::vectorintvalues{1,0,2,0,3};autonewEndstd::remove(values.begin(),values.end(),0);执行后 values.size() 仍然是 5。要真正缩短容器还需要 erase。3. erase-remove 惯用法values.erase(std::remove(values.begin(),values.end(),0),values.end());这段代码分两步remove 把保留元素移到前面erase 删除从新逻辑结尾到真实结尾的元素。按条件删除时使用 remove_ifvalues.erase(std::remove_if(values.begin(),values.end(),[](intx){returnx0;}),values.end());4. C20 的更简洁写法C20 为常用容器提供了 std::erase 和 std::erase_if。std::erase(values,0);std::erase_if(values,[](intx){returnx0;});表达更直接也不容易忘记第二步 erase。5. 遍历时删除元素需要边遍历边删除时使用 erase 的返回值继续迭代。for(autoitvalues.begin();it!values.end();){if(*it%20){itvalues.erase(it);}else{it;}}vector::erase 会让删除位置及其后的迭代器、引用和指针失效因此不能继续使用旧 it也不要在 erase 后无条件再 it。6. 删除多个元素的性能循环中反复调用 erase 可能多次移动后续元素最坏情况下成本很高。如果删除条件可以一次判断erase-remove 或 erase_if 通常更高效因为保留元素只需集中移动。如果不要求保持原顺序还可以用“与末尾交换再 pop_back”的方式进行 O(1) 单次删除values[index]std::move(values.back());values.pop_back();这种方法会改变元素顺序只适合顺序不重要的场景。7. 常见误区只调用 remove误以为 size 会变小erase 后继续使用已经失效的迭代器在范围 for 中直接删除 vector 元素不考虑是否需要保持元素原顺序。8. 一页速查场景推荐写法删除指定值C11erase(remove(…), end())按条件删除C11erase(remove_if(…), end())删除指定值C20std::erase(container, value)按条件删除C20std::erase_if(container, pred)遍历中删除it container.erase(it)9. 总结std::remove 只调整元素位置不负责缩小容器真正删除要配合 erase。C20 可优先使用 std::erase 和 std::erase_if。遍历中删除时必须接住 erase 返回的新迭代器并牢记 vector 的迭代器失效规则。

相关新闻

Docker容器化与云端部署实战:用TaoToken统一Key打通AI服务上线链路

Docker容器化与云端部署实战:用TaoToken统一Key打通AI服务上线链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 6:34:28 阅读更多 →
k8s-5:Traefik 配置用户登录,限制 K8S 的 web 服务访问

k8s-5:Traefik 配置用户登录,限制 K8S 的 web 服务访问

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 4:50:53 阅读更多 →
苏州网站建设托管避坑:3个细节让你的官网颜值翻倍

苏州网站建设托管避坑:3个细节让你的官网颜值翻倍

苏州网站建设托管避坑:3个细节让你的官网颜值翻倍 别再被那些一眼假、排版乱的模板网站坑了。很多老板花了几千块做的站,发出去客户都嫌土,根本撑不起品牌形象。在苏州这片电商和制造业扎堆的地方,网站就是电子名片,丑就是硬伤。…

2026/9/29 18:17:58 阅读更多 →

最新新闻

Element UI Dialog 弹窗滚动改造:Flex 布局实现固定高度与内部滚动

Element UI Dialog 弹窗滚动改造:Flex 布局实现固定高度与内部滚动

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 16:36:48 阅读更多 →
Ubuntu 22.04 安装 Chrome:deb 包安装与避坑指南

Ubuntu 22.04 安装 Chrome:deb 包安装与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 16:36:48 阅读更多 →
企业微信微盘下载失败原因排查与解决指南

企业微信微盘下载失败原因排查与解决指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 16:36:48 阅读更多 →
马德拉岛深度游攻略:徒步路线、自驾避坑与七天行程规划

马德拉岛深度游攻略:徒步路线、自驾避坑与七天行程规划

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 16:36:48 阅读更多 →
导数是什么:从瞬时变化率到现实世界的关键工具

导数是什么:从瞬时变化率到现实世界的关键工具

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 16:36:48 阅读更多 →
CentOS 7 升级 OpenSSH 9.0p1:源码/RPM与配置迁移

CentOS 7 升级 OpenSSH 9.0p1:源码/RPM与配置迁移

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 16:35:47 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →