pstade::oven::copied

#include <vector>
#include <list>
#include <assert.h>

#include <pstade/oven/copied.hpp>

int
main(){
    namespace oven = pstade::oven;
    namespace lambda = boost::lambda;

    int    array[] = {0, 1, 2, 3, 4};

    std::vector<int> array2 = array|oven::copied;
    std::list<int>     array3 = array|oven::copied;

    assert( boost::equal(array2, array3) );
    
    return 0;
}


pstade::oven::copied は、他のコンテナ型に代入可能な range を返してくれるアダプタです。(って、認識で間違ってないと思います。多分。)
transformed や filterd 等でごにょごにょやって、最終的にコンテナにコピーするって使い方が普通なのかな?

namespace oven = pstade::oven;
namespace lambda = boost::lambda;

int    array[] = {0, 1, 2, 3, 4};
std::list<int> array2 = array
                      |oven::transformed(lambda::_1 + lambda::_1)
                      |oven::copied;

boost::for_each(array2, [](int n){
    std::cout << n;
});


[出力]

02468


あとこんなトリッキーな事も出来ます。

namespace oven = pstade::oven;
namespace lambda = boost::lambda;

int	array[] = {0, 1, 2, 3, 4};

boost::tuple<std::vector<int>, std::vector<int> > hoge
	= boost::make_tuple(array|oven::copied, array|oven::copied);


[pstade]
ver 1.04.3