vector
中era
函数原型如下:
用于删除 vector 容器中的一个或者一段元素。
在删除一个元素的时候,其参数为指向相应元素的迭代器;而在删除一段元素的时候,参数为指向一段元素的开头的迭代器以及指向结尾元素的下一个元素的迭代器。
调用era
后,vector
元素会向前移,因此需要格外注意这个特征,避免越界访问以及漏处理。
示例代码:
algorithm
中remove
原型如下:
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
和win7打开方式era
存在很大的区别。
remove
是algorithm
的模板函数,它接收的都是迭代器参数,并不接收某个容器。remove
并不知道它作用于哪个容器,也不可能发现容器,因为没有办法从一个迭代器获得对应于它的容器。
想要从容器中删除一个元素,唯一的方法就是调用容器的一个成员函数,比如era
函数。而remove
无法知晓,故不可能根据一个传进来的迭代器进而在该容器中除去元素。因此,调用remove
后并不会改变该容器的元素个数。
得出的结论是:remove
并不是真的在删除元素,因为它根本做不到。
(注意:开车旅行begin
与end
是左闭右tour开区间,即end
是vector
之外了,即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 条评论) |