为 std::any_of 等提供反向迭代器是不是有意义?

Posted

技术标签:

【中文标题】为 std::any_of 等提供反向迭代器是不是有意义?【英文标题】:Does it make sense to give reverse iterators to std::any_of and the like?为 std::any_of 等提供反向迭代器是否有意义? 【发布时间】:2020-03-06 09:35:11 【问题描述】:

我想检查向量中是否存在值。 最有可能在向量的末尾,这样使用反向迭代器是否有意义:

std::vector<int> v;
//... add a lot of values ...
const int valueToCheckFor42;
if (std::any_of(v.crbegin(), v.crend(), [valueToCheckFor](const auto x) return valueToCheckFor == x; 

或者是

if (std::any_of(v.cbegin(), v.cend(), [valueToCheckFor](const auto x) return valueToCheckFor == x; 

同样,因为std::any_of中的执行顺序没有指定,我最好使用for循环?

这是针对 c++11/c++14 的

【问题讨论】:

std::find(v.crbegin(), v.crend(), 42)) != v.crend()。这是按顺序搜索的保证。 请记住,算法范围上运行。他们不在乎你从哪里得到范围。 std::vector 是管理范围的一种方式,但不是唯一的方式。再说一遍:算法不知道也不关心。 【参考方案1】:

如果元素可能在结尾。

std::any_of(v.crbegin(), 
           v.crend(), 
           [valueToCheckFor](const auto x)
            return valueToCheckFor == x; 
          );

更有意义并且可以正常工作。

【讨论】:

以上是关于为 std::any_of 等提供反向迭代器是不是有意义?的主要内容,如果未能解决你的问题,请参考以下文章

确定 (c++) 迭代器是不是是反向的

自定义迭代器:比如输入奇数项,反向迭代等

如何在 C++ 中反向迭代地图?

容器迭代器

反向迭代器

反向迭代器