首页 > 作文

一起来学习C++中remove与erase的理解

更新时间:2023-04-06 02:28:33 阅读: 评论:0

era 简介

vectorera函数原型如下:

用于删除 vector 容器中的一个或者一段元素

在删除一个元素的时候,其参数为指向相应元素的迭代器;而在删除一段元素的时候,参数为指向一段元素的开头的迭代器以及指向结尾元素的下一个元素的迭代器

调用era后,vector元素会向前移,因此需要格外注意这个特征,避免越界访问以及漏处理。

示例代码:

remove 简介

algorithmremove原型如下:

remove函数是由stl库中algorithm提供的一个函数,这里的remove字面意思很容易引起初学者误解。因为调用以后并非真实的remove

代码示例

运行后打印如下:

init : 1 2 3 3 4 5
era array.begin() :2 3 3 4 5
remove 2 : 3 3 4 5 5
remove2it traver : 5
remove 3 : 4 5 5 5 5
remove3it traver : 5 5

代码分析

如上所示,执行array.era(array.begin());后,符合预期地将第一个元素删除了,打印结果为:era array.begin() : 2 3 3 4 5

在此基础(2 3 3 4 5)上执行remove(array.begin集体婚礼策划(), array.end(), 2);,可能惯性思维会觉得得到的结果(这个是错误的结果,效果就像调用了 era 一样)应该是3 3 4 5,4 个元素。而实际打印结果为:3 3 4 5 5,5 个元素。这里完全“颠覆”了对 remove 这一字义的认识。

remove 是如何工作的?

查找资料后发现,removewin7打开方式era存在很大的区别。

removealgorithm的模板函数,它接收的都是迭代器参数,并不接收某个容器。remove并不知道它作用于哪个容器,也不可能发现容器,因为没有办法从一个迭代器获得对应于它的容器。

想要从容器中删除一个元素,唯一的方法就是调用容器的一个成员函数,比如era函数。而remove无法知晓,故不可能根据一个传进来的迭代器进而在该容器中除去元素。因此,调用remove后并不会改变该容器的元素个数

得出的结论是:remove并不是真的在删除元素,因为它根本做不到

remove 的工作流程

(注意:开车旅行beginend左闭右tour开区间,即endvector之外了,即vector最后一个元素的下一个。)

这里需要明确一点是,remove()的返回值是一个iterator

再来看 remove(3) 的过程:

至此述职,大概可以弄清楚remove这个函数对一个vector做了哪些操作,改变了哪些元素的顺序,以及返回值是指向何处

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!

本文发布于:2023-04-06 02:28:32,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/ca15d414422d034ff933b216c189d7ec.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:一起来学习C++中remove与erase的理解.doc

本文 PDF 下载地址:一起来学习C++中remove与erase的理解.pdf

标签:元素   容器   函数   迭代
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图