【问题标题】:What is Range V3 for MakeStream::iterate()?MakeStream::iterate() 的 Range V3 是什么?
【发布时间】:2016-06-07 05:47:43
【问题描述】:

C++ Streams 有iterate(),它接受一个初始值n 和一个函数f(),然后首先生成n,然后是f(n)、f(f(n))...

auto stream = MakeStream::iterate(1245, [](int x) {
    if(x % 2 == 0) {
        return x / 2;
    } else {
        return 3 * x + 1;
    }
});

Range V3 对此有何用处?

【问题讨论】:

    标签: c++ functional-programming range-v3 c++-experimental


    【解决方案1】:

    在 range-v3 中,您可以使用 view::generate 创建这样的范围:

    auto stream = ranges::view::generate([x=1245]() mutable {
        auto old = x;
        if(x % 2 == 0)
            x /= 2;
        else
            x = 3 * x + 1;
        return old;
    });
    

    DEMO

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 2019-11-10
      • 2020-08-25
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多