【问题标题】: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 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 是管理范围的一种方式,但不是唯一的方式。再说一遍:算法不知道也不关心。

标签: c++ c++11 stl


【解决方案1】:

如果元素可能在结尾。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 2021-06-07
    • 2019-02-25
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多