OvenToBoost as_container

少し前ですが、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