2013-01-16 3 views
0

j'aiConvertir deux vecteurs dans un vecteur de tuples utilisant stl et stimuler

vector<time> tt; 
vector<space> xx; 

Je voudrais obtenir

vector<tuple<time,space>> trajectory; 

c'est ce que j'ai jusqu'à présent

std::for_each(boost::make_zip_iterator(
     boost::make_tuple(tt.begin(),xx.begin(), 
     boost::make_tuple(tt.end(),xx.end(), 
     []() { 
      trajectory.push_back(make_tuple(get<0>(),get<1>())); 
     } 
     ); 

Je ne suis pas sûr de savoir comment aller plus loin. une façon est que je peux faire un foncteur comme zip_func dans http://www.boost.org/doc/libs/1_52_0/libs/iterator/doc/zip_iterator.html#examples mais je ne veux pas écrire de code supplémentaire et je veux utiliser lambda. des pensées?

Répondre

0

Que diriez-vous quelque chose comme (code non testé):

std::copy( 
    boost::make_zip_iterator(boost::make_tuple(tt.begin(),xx.begin()), 
    boost::make_zip_iterator(boost::make_tuple(tt.end (),xx.end ()), 
    std::back_inserter(trajectory) 
    ); 

Pas besoin d'un lambda! Dans votre code d'exemple, vous déballez un tuple uniquement pour créer un autre tuple, donc j'ai été capable de m'en débarrasser.