Что такое Range V3 для MakeStream::iterate()?

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 имеет для этого?

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

Другие вопросы по тегам