C ++ STL,常量迭代器,find()

时间:2013-06-04 20:51:55

标签: c++ stl iterator find constants

我目前正在学习STL,我对find和const迭代器有一些不确定性。 假设我有一个查找功能:

some_stl_container::const_iterator found = myContainer.find(value);

之后我应该检查一下found对另一个const_iterator的看法,或者是它 有效,只对一个迭代器进行检查。 基本上这样做会有任何区别:

if(found!=myContainer.cend())

和此:

if(found!=myContainer.end())

第一个看起来更准确(至少对我而言),但第二个也应该正常工作,对吗?

2 个答案:

答案 0 :(得分:9)

所有标准库容器都满足Container::iterator可转换为Container::const_iterator的要求。因此,两种比较都是有效的,并且会产生相同的结果。

来自§23.2.1 - 表96

  

X::iterator ...满足前向迭代器的任何迭代器类别   要求。可转换为X::const_iterator

答案 1 :(得分:1)

检查你的迭代器是否与myContainer.end()不同是没问题的。 cendcbegin方法仅用于显式获取const迭代器,因此在您的情况下没有任何区别。

请注意,您可以在c ++ 11中执行auto found = myContainer.find(value)来推断迭代器类型,并且有些人会认为标准库是正确的名称(而不是STL)。< / p>