为 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 等提供反向迭代器是不是有意义?的主要内容,如果未能解决你的问题,请参考以下文章