Foreach For iterating two containers - Boost ML
こういうことしたいけど
std::vector<int>::iterator iter1; std::vector<std::string>::iterator iter2; for( iter1 = cont1->begin(), iter2 = cont2->begin(); iter1 != cont1->end() && iter2 != cont2->end(); ++iter1, ++iter2 ) { int x = *iter1; std::string y = *iter2; ..... }
Boost.Foreachじゃできないからこういうのほしくない?
というお話。
forboth( int x, std::string y, cont1, cont2 )
{
}
それOvenでできるよ。
#include <iostream> #include <vector> #include <string> #include <pstade/oven/zipped.hpp> #include <pstade/oven/initial_values.hpp> #include <pstade/oven/algorithm.hpp> namespace oven = pstade::oven; void disp(boost::tuples::tuple<int, const std::string&> t) { std::cout << boost::get<0>(t) << "," << boost::get<1>(t) << std::endl; } int main() { const std::vector<int> vi = oven::initial_values(1, 2, 3); const std::vector<std::string> vs = oven::initial_values("a", "b", "c"); oven::for_each(boost::make_tuple(vi, vs)|oven::zipped, &disp); }
1,a 2,b 3,c
# GCC 4.5でOven動かない・・・?