Fra*_*ank 27 c++ iterator stl const-iterator
最近有人提出 Scott Meyers的文章说:
iterators
超过const_iterators
(PDF链接).其他人评论说这篇文章可能已经过时了.我想知道你的意见是什么?
这是我的:文章的一个要点是你不能删除或插入const_iterator
,但我认为用它作为反对的论据很有趣const_iterators
.我认为它的全部意义const_iterators
在于你根本不修改范围,也不是通过插入或删除来替换它们的值或范围.或者我错过了什么?
Gal*_*man 22
我完全同意你的看法.我认为答案很简单:使用const_iterators,其中const值是正确的使用方法,反之亦然.在我看来,反对const_iterators的人一般都要反对const ...
这是一个略微不同的方式来看待它.Const_iterator
当你将它作为指针传递到特定的集合并且你也传递集合时几乎没有意义.Meyer先生特别指出,const_iterator
不能与集合实例的大多数成员函数一起使用.在这种情况下,你需要一个普通的老人iterator
.但是,如果您没有集合的句柄,则两者之间的唯一区别是您可以修改由a 指向的内容,iterator
并且您无法修改a引用的对象const_iterator
.
所以...... iterator
无论何时将集合和位置传递给算法,都要使用.基本上,签名如:
void some_operation(std::vector<int>& vec, std::vector::const_iterator pos);
Run Code Online (Sandbox Code Playgroud)
没有多大意义.隐式语句可以some_operation
自由修改底层集合,但不允许修改pos
引用.这没有多大意义.如果你真的想要这个,那么pos
应该是一个偏移而不是一个迭代器.
另一方面,STL中的大多数算法都基于一对迭代器指定的范围.集合本身是从来没有过这样的区别iterator
而const_iterator
在于是否集合中的值可以通过迭代或不进行修改.没有参考集合,分离是非常清楚的.
希望这能使事情像泥一样清晰;)