我目前正在学习STL,我对find和const迭代器有一些不确定性。 假设我有一个查找功能:
some_stl_container::const_iterator found = myContainer.find(value);
之后我应该检查一下found
对另一个const_iterator的看法,或者是它
有效,只对一个迭代器进行检查。
基本上这样做会有任何区别:
if(found!=myContainer.cend())
和此:
if(found!=myContainer.end())
第一个看起来更准确(至少对我而言),但第二个也应该正常工作,对吗?
答案 0 :(得分:9)
所有标准库容器都满足Container::iterator
可转换为Container::const_iterator
的要求。因此,两种比较都是有效的,并且会产生相同的结果。
来自§23.2.1 - 表96
X::iterator
...
满足前向迭代器的任何迭代器类别 要求。可转换为X::const_iterator
。
答案 1 :(得分:1)
检查你的迭代器是否与myContainer.end()
不同是没问题的。 cend
和cbegin
方法仅用于显式获取const迭代器,因此在您的情况下没有任何区别。
请注意,您可以在c ++ 11中执行auto found = myContainer.find(value)
来推断迭代器类型,并且有些人会认为标准库是正确的名称(而不是STL)。< / p>