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对此有什么作用?
答案 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 强>