Преобразовать два вектора в вектор кортежей, используя stl и boost

Я имею

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

я хотел бы получить

vector<tuple<time,space>> trajectory;

это то, что я до сих пор

  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>()));
        }
        );

Я не уверен, что делать дальше. Одним из способов является то, что я могу сделать функтор в виде zip_func в http://www.boost.org/doc/libs/1_52_0/libs/iterator/doc/zip_iterator.html но я не хочу писать дополнительный код, и я хочу использовать лямбду. Какие-нибудь мысли?

1 ответ

Как насчет чего-то вроде (непроверенный код):

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)
    );

Не нужно лямбда! В вашем примере кода вы распаковываете кортеж только для создания другого кортежа, поэтому я смог от него избавиться.

Другие вопросы по тегам