【发布时间】:2020-03-06 09:35:11
【问题描述】:
我想检查向量中是否存在值。 最有可能在向量的末尾,这样使用反向迭代器是否有意义:
std::vector<int> v{};
//... add a lot of values ...
const int valueToCheckFor{42};
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是管理范围的一种方式,但不是唯一的方式。再说一遍:算法不知道也不关心。