什么是MakeStream :: iterate()的Range V3?

时间:2016-02-24 18:53:04

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

C++ Streamsiterate(),其初始值为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对此有什么作用?

1 个答案:

答案 0 :(得分:2)

在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