【问题标题】:Replace for loop with std::find_if and a lambda用 std::find_if 和 lambda 替换 for 循环
【发布时间】:2021-03-15 14:21:51
【问题描述】:

考虑这段代码:

int i{ -1 };
for(i=0; i<size; ++i) if (predicate(i)) break;
bool found{ i < size };

这应该很容易用 std::find_if 替换,但它需要一个对 0 到 size-1 范围内的整数的迭代器。 (相当于 C# 的 IEnumerable Enumerable.Range(0, size-1)。)

【问题讨论】:

  • 您需要 C++20 范围或自定义迭代器。
  • 我不明白found 是如何在这里工作的。无论如何,当循环退出时,i &gt;= 0 不会是真的吗?
  • for() 循环中的初始化部分发生在条件检查和正文执行之前,因此i 不可能为负数,也不清楚您想要实现什么。
  • 那么请编辑您的问题以说明这一点。就目前而言,这个问题让未来的读者感到困惑。

标签: c++ boost stl c++17


【解决方案1】:

由于您使用boost 标签标记了您的问题,我假设boost::irangeboost::find_if 将完成这项工作:

boost::find_if(boost::irange(0, size - 1), predicate);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2017-08-13
    • 2019-04-04
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多