Что такое 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;
}
});

Что значит Диапазон V3 есть для этого?

3

Решение

В 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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]