フィボナッチ数列を適当に作ります。
class cFib : public cIterable<int> { int a; int b; public: cFib() : a(1), b(1) { } bool exists_next() { int tmp = b; b += a; a = tmp; return true; } int value() const { return a; } }; shared_ptr<cIterable<int>> fib() { return shared_ptr<cIterable<int>>(new cFib()); }
これで、Project EulerのProblem 2が計算できます。
const int N = 4000000; auto even = [] (int n) { return n % 2 == 0; }; auto pred = [&] (int n) { return n <= N; }; cout << sum(takewhile(pred, filter(even, fib()))) << endl;