- 11 名前:デフォルトの名無しさん [2009/01/08(木) 00:58:10 ]
- ちょうどいい。そのうち書こうと思っていた。
もっとも単純な(?)使い方は、複数レンジを同時にfor eachすることだと思う。 #include <iostream> #include <boost/foreach.hpp> #include <pstade/oven/zipped.hpp> int main() { using namespace pstade::oven; int const a[] = {1, 2, 3}; long const b[] = {2, 4, 6}; typedef boost::tuple<int, long> my_tupple_t; BOOST_FOREACH(my_tupple_t const& e, boost::make_tuple(a, b) | zipped) { std::cout << boost::get<0>(e) + boost::get<1>(e) << std::endl; } for (std::size_t i = 0; i < sizeof a / sizeof a[0]; ++i) { std::cout << a[i] + b[i] << std::endl; } } 上のBOOST_FOREACHと下のforで同じことをやっている。 普通、同時に複数のレンジのfor eachはできないが、要素をtupleでまとめることでそれを実現している(eのこと)。 レンジを渡す側も、tupleで1つにまとめることで、複数のレンジを1つの | へ渡すことを可能にしている。 for eachだとあまり有難みは無いが、アルゴリズム関数で複数個のレンジまたはイテレータを渡せるようになるのが嬉しい。 例えば、STL <algorithm>のtransformは入力イテレータ1つのと2つのしかないが、 そんな用意がなくともzippedで束ねればいくつでも渡せるという具合。
|

|