通过C ++中的对(或更多)对象进行迭代

时间:2013-10-24 05:44:52

标签: c++ python iterator

我知道你可以迭代这样的容器:

for(double x : mycontainer) 

类似于Python的

for x in mylist:

但是,有时我需要访问具有相同索引的另一个容器中的元素,并且我必须创建一个普通的for循环。在Python中,或者,我可以(对于两个或更多列表):

for (x,y) in zip(xlist, ylist):

C ++中有类似内容吗?

2 个答案:

答案 0 :(得分:2)

我知道的最近的事情是boost::combine(但是,我没有看到它的文档 - 实际上,有trac ticket用于添加它)。它在内部使用boost::zip_iterator,但更方便:

LIVE DEMO

#include <boost/range/combine.hpp>
#include <iostream>

int main()
{
    using namespace boost;
    using namespace std;

    int x[3] = {1,2,3};
    double y[3] = {1.1, 2.2, 3.3};

    for(const auto &p : combine(x,y))
        cout << get<0>(p) << " " << get<1>(p) << endl;
}

输出是:

1 1.1
2 2.2
3 3.3

答案 1 :(得分:0)

我所知道的最接近的模拟是Boost的zip iterator

在典型情况下,您使用boost::make_zip_iteratorboost:make_tuple,因此您最终会得到以下内容:

boost::make_zip_iterator(boost:make_tuple(xlist.begin(), ylist.begin()))

boost::make_zip_iterator(boost::make_tuple(xlist.end(), ylist.end()))

遗憾的是,这比Python版本更加冗长,但有时候这就是生活。