新闻中心

C++ vector如何删除元素_C++ vector erase与remove用法解析

2025-12-05
浏览次数:
返回列表
erase直接删除元素并调整大小,remove仅移动元素不改变大小,需结合erase使用;标准做法是erase-remove惯用法,如vec.erase(remove(vec.begin(), vec.end(), value), vec.end())。

c++ vector如何删除元素_c++ vector erase与remove用法解析

在C++中,vector 是最常用的动态数组容器之一。当我们需要删除其中的元素时,常会用到 eraseremove 相关函数。但很多人容易混淆它们的用法,尤其是 remove 并不会真正减少 vector 的大小。下面详细解析 eraseremove 的正确使用方式。

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:移动而非删除

removegorithm> 中的函数,它**不会改变容器大小**,而是将不满足条件的元素“移到”前面,返回一个指向新逻辑末尾的迭代器。

关键点:
  • 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()
);

适用于 vectorlist 等支持随机访问迭代器的序列容器。

该方法高效且通用,避免了频繁调用 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找不到蓝牙开关解决方法 

搜索