当前位置: 首页 > ai >正文

erase-remove idiom介绍

如下代码:

lists.erase(remove_if(lists.begin(), lists.end(), [] (auto p) { return !p; }), lists.end());

lists是一个vector类型的变量。

里面关键要注意的:

remove_if 实际不会移除元素

remove_if 并不会真正删除容器中的元素,而是:

  • 重排容器内元素,把符合条件的元素移到后面;

  • 返回一个迭代器 new_end,指向“逻辑上”末尾的位置(即要删的元素开始处)。

也就是说,remove_if 只是**“标记要删的元素”,并把它们挪到末尾,但并不真正删掉**。

所以上面代码的意思:

  1. remove_if: 把 nullptr 元素移到末尾,并返回“第一个 nullptr”的位置;

  2. erase: 从这个位置开始删掉所有 nullptr 元素。


注意:这个惯用法不适用于 std::list

因为 std::list 有自带的 .remove_if(),它会直接删除元素,不需要配合 erase。但 std::vector 不行,必须两步。

 

http://www.xdnf.cn/news/10761.html

相关文章:

  • EtherCAT背板方案:方芯半导体工业自动化领域的高速、高精度的通信解决方案
  • 学习资料搜集-ARMv8 cache 操作
  • 704. 二分查找 (力扣)
  • 实践深度学习:构建一个简单的图像分类器
  • ORACLE 缺失 OracleDBConsoleorcl服务导致https://xxx:port/em 不能访问
  • 道可云人工智能每日资讯|北京农业人工智能与机器人研究院揭牌
  • 会议效率低下,应该怎么办
  • Linux 与 Windows:哪个操作系统适合你?
  • 飞腾D2000,麒麟系统V10,docker,ubuntu1804,小白入门喂饭级教程
  • 硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总
  • React 基础语法
  • MySQL关系型数据库学习
  • Ubuntu24.04.2 + kubectl1.33.1 + containerdv1.7.27 + calicov3.30.0
  • C++ set数据插入、set数据查找、set数据删除、set数据统计、set排序规则、代码练习1、2
  • 【C/C++】template 入门到高阶简单大纲
  • rabbitMQ初入门
  • LangChain操作指南
  • 三、kafka消费的全流程
  • 6月2日day43打卡
  • 安全大模型的思考
  • 每日算法 -【Swift 算法】查找字符串数组中的最长公共前缀
  • 婚恋小程序直播系统框架搭建
  • VBA模拟进度条
  • 飞书常用功能(留档)
  • Dockerfile 使用多阶段构建(build 阶段 → release 阶段)后端配置
  • 从Java的JDK源码中学设计模式之装饰器模式
  • 2021 RoboCom 世界机器人开发者大赛-高职组(复赛)解题报告 | 珂学家
  • C#学习12——预处理
  • 当 AI 超越人类:从技术突破到文明拐点的 2025-2030 年全景展望
  • Manus AI与多语言手写识别的创新革命:从技术突破到行业赋能