少し前ですが、oven::copied相当の機能を持つas_containerを、ドキュメントを書いてexperimentalから本流に移動しました。現在は、
Ovenと名前が違うのは、Boost.Rangeにすでに同名で別な意味を持つ機能があるからです。
#include <iostream> #include <vector> #include <boost/range/algorithm/for_each.hpp> #include <boost/range/adaptor/filtered.hpp> #include <boost/range/adaptor/transformed.hpp> #include <boost/range/as_container.hpp> bool is_even(int x) { return x % 2 == 0; } int add(int x) { return x + 1; } void disp(int x) { std::cout << x << std::endl; } int main() { const std::vector<int> v = {1, 2, 3, 4, 5}; // Rangeアダプタを全て評価してコンテナに代入 const std::vector<int> v2 = v | boost::adaptors::filtered(is_even) | boost::adaptors::transformed(add) | boost::as_container; boost::for_each(v2, disp); }
3 5