Oven/Egg総合スレ part1
■ このスレッドは過去ログ倉庫に格納されています
0011デフォルトの名無しさん
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で束ねればいくつでも渡せるという具合。
■ このスレッドは過去ログ倉庫に格納されています