読者です 読者をやめる 読者になる 読者になる

2つのコンテナを同時に走査する

C++

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動かない・・・?