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

面试二十五、remove和earse的区别

        vector中erase的作用是删除掉某个位置position或一段区域(begin, end)中的元素,减少其size,返回被删除元素下一个元素的位置。

        vector中remove的作用是将范围内为val的值都remove到后面,返回新的_last值(非val部分的end),但传入的原vector的end并没有发生改变,因此size也就没有变化。

remove

  remove 函数通常用于从容器(如数组、向量、列表等)中删除指定值的元素。但是,它不会改变容器的大小,而是将要删除的元素移动到容器的末尾,并返回一个指向新的逻辑末尾的迭代器。然后你可以使用容器的 erase 函数将这些元素从容器中删除。remove 可以用于序列式容器(如数组、向量),也可以用于关联式容器(如集合、映射),但是它的行为在关联式容器中可能会有所不同。

std::vector<int> vec{1, 2, 3, 4, 5};
auto new_end = std::remove(vec.begin(), vec.end(), 3);
vec.erase(new_end, vec.end());
// 此时 vec 变为 {1, 2, 4, 5}

erase

   erase 函数用于从容器中删除指定位置或范围的元素,并返回指向删除后的新位置的迭代器。它可以用于序列式容器和关联式容器,其行为在不同容器类型上可能有所不同。

std::vector<int> vec{1, 2, 3, 4, 5};
vec.erase(vec.begin() + 2); // 删除第三个元素
// 此时 vec 变为 {1, 2, 4, 5}std::set<int> s{1, 2, 3, 4, 5};
s.erase(3); // 删除值为 3 的元素
// 此时 s 变为 {1, 2, 4, 5}

1. erase大小变了, remove大小不变

2. erase返回值是下一个元素的迭代器,remove返回一个指向新的逻辑末尾的迭代器

std::remove_if

  • std::remove_if 函数用于根据指定的条件删除容器中的元素。它将满足条件的元素移动到容器的末尾,并返回一个指向新的逻辑末尾的迭代器。和 std::remove 一样,它不会改变容器的大小,你需要使用容器的 erase 函数来彻底删除这些移动到末尾的元素。
    std::vector<int> vec{1, 2, 3, 4, 5};
    auto new_end = std::remove_if(vec.begin(), vec.end(), [](int x) { return x % 2 == 0; });
    vec.erase(new_end, vec.end());
    // 此时 vec 变为 {1, 3, 5}
    

http://www.lryc.cn/news/342750.html

相关文章:

  • 普乐蛙元宇宙VR体验馆设备集体亮相VR文旅景区展
  • 北京大学-知存科技存算一体联合实验室揭牌,开启知存科技产学研融合战略新升级
  • 项目总结(一)docker总结
  • 深圳比创达EMC|EMC一站式解决方案:助力电子产品电磁兼容性升级
  • 万兆以太网MAC设计(11)完整UDP协议栈仿真
  • 【牛客】【模板】差分
  • 鸿蒙内核源码分析(中断管理篇) | 江湖从此不再怕中断
  • php使用rabbitmq
  • 前端发起网络请求的几种常见方式(XMLHttpRequest、FetchApi、jQueryAjax、Axios)
  • 通过氧气退火增强β-Ga₂O₃二极管.中国科技大学和河北半导体研究所的研究人员在这一特定领域取得了最新重大进展
  • C语言猜数字游戏
  • 笔记本连接不上远程桌面,笔记本无法连接远程桌面的可能原因及解决方法
  • Android 音视频播放器 Demo(一)—— 视频解码与渲染
  • Flutter笔记:Widgets Easier组件库(3)使用按钮组件
  • 荷香堪筑梦,鸳鸯和月寻。(变相BFS搜索)
  • 智慧公厕建设,打造智慧城市基础设施新亮点
  • Kubernetes 教程:在 Containerd 容器中使用 GPU
  • LNMP部署wordpress
  • 本地部署大模型ollama+docker+open WebUI/Lobe Chat
  • qt学习篇---界面按键关联(信号和槽)
  • python Django 的内置权限系统或自定义模型来存储更复杂的角色和权限关系
  • 不上班,我靠这5份赚钱副业养活了自己
  • 强一致性的皇冠:分布式事务模型的至高法则揭秘
  • mac/windows下安装docker,minikube
  • 【爬虫】fake_useragent的使用、BeautifulSoup(find()和find_all())
  • ComfyUI中图像亮度/对比度/饱和度处理
  • 基于FPGA的DDS波形发生器VHDL代码Quartus仿真
  • C++语法|可调用对象与function类型
  • Linux学习之路 -- 文件 -- 文件描述符
  • JDK动态代理和Cglib动态代理区别