新闻中心
C++ vector如何删除元素_C++ vector erase与remove用法解析
erase直接删除元素并调整大小,remove仅移动元素不改变大小,需结合erase使用;标准做法是erase-remove惯用法,如vec.erase(remove(vec.begin(), vec.end(), value), vec.end())。

在C++中,vector 是最常用的动态数组容器之一。当我们需要删除其中的元素时,常会用到 erase 和 remove 相关函数。但很多人容易混淆它们的用法,尤其是 remove 并不会真正减少 vector 的大小。下面详细解析 erase 与 remove 的正确使用方式。
erase:直接删除指定位置或区间的元素
erase 是 vector 成员函数,用于从容器中**真正删除**元素,并自动调整容器大小。
-
iterator erase(iterator pos);— 删除单个元素 -
iterator erase(iterator first, iterator last);— 删除一个区间
示例:
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 删除第2个元素(值为2)
vec.erase(vec.begin() + 1);
// 删除 [3,5) 区间,即第3和第4个元素
vec.erase(vec.begin() + 2, vec.begin() + 4);
for (int n : vec) cout << n << " "; // 输出:1 3 5
}
注意:erase 操作后,被删位置之后的所有元素都会前移,迭代器可能失效,需谨慎使用。
remove 与 remove_if:移动而非删除
remove 是 gorithm> 中的函数,它**不会改变容器大小**,而是将不满足条件的元素“移到”前面,返回一个指向新逻辑末尾的迭代器。
- remove 只是重排元素,不释放内存
- 必须配合 erase 使用才能真正删除(即 “erase-remove 惯用法”)
示例:删除所有值为3的元素
拾贝
一键同步微信读书所有笔记和划线,并在新标签页回顾
186
查看详情
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec = {1, 3, 2, 3, 4,
3, 5};
// 将非3的元素移到前面,返回新末尾
auto new_end = remove(vec.begin(), vec.end(), 3);
// 手动擦除无效部分
vec.erase(new_end, vec.end());
for (int n : vec) cout << n << " "; // 输出:1 2 4 5
}
remove_if 用于更复杂的条件,比如删除所有偶数:
vec.erase(
remove_if(vec.begin(), vec.end(), [](int n){ return n % 2 == 0; }),
vec.end()
);
erase-remove 惯用法总结
这是 C++ 中删除满足条件元素的标准做法:
container.erase(
remove(container.begin(), container.end(), value),
container.end()
);
适用于 vector、list 等支持随机访问迭代器的序列容器。
该方法高效且通用,避免了频繁调用 erase 导致的性能问题(每次 erase 都要移动后续元素)。
基本上就这些。记住:remove 移动,erase 删除,两者结合才是完整删除操作。
以上就是C++ vector如何删除元素_C++ vector erase与remove用法解析的详细内容,更多请关注其它相关文章!
# 管理机制
# 水滴软文营销推广
# 福州网站建设商城
# 塔式机械车库网站建设
# 企业网站建设汉狮
# 兴山网络营销网络推广中心
# 厦门企业关键词排名软件
# 怎么做谷歌网站优化推广
# 长沙seo优化服务商
# 延川全网营销推广系统官网
# 蜜蜂网站建设素材
# 复用
# 多路
# go
# 如何实现
# 值为
# 何为
# 移到
# 迭代
# 拾贝
# 都是
# stream
# ios
# c++
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台
微博网页版官方账号登录 微博网页版内容浏览使用指南
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
快手赚钱渠道_快手收益来源
cad如何更改注释性对象的比例_cad注释性比例调整方法
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
网站内容防复制粘贴的实现策略与局限性
Log4j Console Appender性能瓶颈与高并发优化策略
Eclipse怎么运行工程_Eclipse工程运行配置说明
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
CSS子选择器:如何区分并样式化嵌套列表的子层级
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
Go语言HTML解析:利用Goquery精准获取指定元素内容
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法
C++如何生成随机数_C++ random库使用方法与范围设置
QQ官网正版登录链接 QQ在线登录入口最新
Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】
黑猫投诉统一入口官网 消费者权益保护投诉平台
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
顺丰快递查单号物流信息 顺丰快递小程序查询入口
AI泡沫首次被“刺破”:GPU十年都无法存活!
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
蛙漫移动版在线看 蛙漫手机浏览器直达入口
快手网页版在线登录 快手网页版官网入口快速访问
《燕云十六声》两周内达九百万玩家!位居畅销榜第五
学习通网页版官方登录 超星学习通电脑端入口指南
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏
Python大型XML文件高效流式解析教程
HTML长属性值处理:表单action路径优化与代码规范应对
淘宝支付提示失败如何解决 淘宝支付流程优化方法
Golang如何优化CPU绑定任务分配策略_Golang CPU任务分配优化实践
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
css绝对定位元素脱离父容器怎么办_确保父元素position非static
QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
多闪网页版在线观看免费入口_多闪官网访问入口
机器学习中对数变换预测结果的反向还原
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
蛙漫2台版漫画地址 Manwa2正版网页版链接
UC浏览器网页版登录入口官网 电脑版网址入口
一加 14R 快充无反应_一加 14R 充电优化
J*aScript类型检查_j*ascript代码规范
Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法


2025-12-05
浏览次数:次
返回列表
3, 5};
// 将非3的元素移到前面,返回新末尾
auto new_end = remove(vec.begin(), vec.end(), 3);
// 手动擦除无效部分
vec.erase(new_end, vec.end());
for (int n : vec) cout << n << " "; // 输出:1 2 4 5
}