C++中remove与erase实例分析


本篇内容介绍了“C++中remove与erase实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vectorerase函数原型如下:用于删除 vector 容器中的一个或者一段元素。在删除一个元素的时候,其参数为指向相应元素的迭代器;而在删除一段元素的时候,参数为指向一段元素的开头的迭代器以及指向结尾元素的下一个元素的迭代器。调用erase后,vector元素会向前移,因此需要格外注意这个特征,避免越界访问以及漏处理。示例代码:algorithmremove原型如下:remove函数是由STL库中algorithm提供的一个函数,这里的remove字面意思很容易引起初学者误解。因为调用以后并非真实的remove运行后打印如下:init : 1 2 3 3 4 5
erase array.begin() :2 3 3 4 5
remove 2 : 3 3 4 5 5
remove2It traverse : 5
remove 3 : 4 5 5 5 5
remove3It traverse : 5 5如上所示,执行array.erase(array.begin());后,符合预期地将第一个元素删除了,打印结果为:erase array.begin() : 2 3 3 4 5。在此基础(2 3 3 4 5)上执行remove(array.begin(), array.end(),免费云主机域名 2);,可能惯性思维会觉得得到的结果(这个是错误的结果,效果就像调用了 erase 一样)应该是3 3 4 5,4 个元素。而实际打印结果为:3 3 4 5 5,5 个元素。这里完全“颠覆”了对 remove 这一字义的认识。查找资料后发现,removeerase存在很大的区别。removealgorithm的模板函数,它接收的都是迭代器参数,并不接收某个容器。remove并不知道它作用于哪个容器,也不可能发现容器,因为没有办法从一个迭代器获得对应于它的容器。想要从容器中删除一个元素,唯一的方法就是调用容器的一个成员函数,比如erase函数。而remove无法知晓,故不可能根据一个传进来的迭代器进而在该容器中除去元素。因此,调用remove后并不会改变该容器的元素个数。得出的结论是:remove并不是真的在删除元素,因为它根本做不到。(注意:beginend左闭右开区间,即endvector之外了,即vector最后一个元素的下一个。)这里需要明确一点是,remove()的返回值是一个iterator再来看 remove(3) 的过程:“C++中remove与erase实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: HTML5标签与HTML标签的区别示例分析

这篇“HTML5标签与HTML标签的区别示例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“HTML5标签与HTML标签的区别示例分析”文章吧…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/10 12:53
下一篇 01/10 12:54

相关推荐