oven::filtered
filteredは、引数で指定された述語を満たす要素を抽出するRangeアダプタです。
#include <iostream> #include <vector> #include <pstade/oven/initial_values.hpp> #include <pstade/oven/io.hpp> #include <pstade/oven/filtered.hpp> using namespace pstade::oven; bool is_even(int x) { return x % 2 == 0; } int main() { const std::vector<int> v = initial_values(1, 2, 3, 4, 5); std::cout << (v|filtered(&is_even)) << std::endl; }
{2,4}
filteredの実装は、operator++が呼ばれたときに述語を満たさない要素を読み飛ばす(さらに進める)
filter_iteratorの範囲を作成する、というものになっています。