oven::indirectedがポインタの配列を、間接参照した範囲に変換するものであるのに対し、
oven::outdirectedは値の配列をポインタ(もしくはイテレータ)の範囲に変換します。
#include <iostream> #include <vector> #include <boost/foreach.hpp> #include <pstade/oven/initial_values.hpp> #include <pstade/oven/outdirected.hpp> #define foreach BOOST_FOREACH using namespace pstade::oven; int main() { std::vector<int> v = initial_values(3, 1, 4); foreach (std::vector<int>::const_iterator it, v|outdirected) { std::cout << *it << std::endl; } }
3 1 4
outdirectedしたものをindirectedすれば元に戻ります。
#include <iostream> #include <vector> #include <pstade/oven/initial_values.hpp> #include <pstade/oven/outdirected.hpp> #include <pstade/oven/indirected.hpp> #include <pstade/oven/io.hpp> using namespace pstade::oven; int main() { std::vector<int> v = initial_values(3, 1, 4); std::cout << (v|outdirected|indirected) << std::endl; // {3,1,4} }
【参照】
vector<shared_ptr<T>>に対するfor_each