0

我知道您可以像这样遍历容器:

for(double x : mycontainer) 

这类似于 Python 的

for x in mylist:

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

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

C ++中有类似的东西吗?

4

2 回答 2

2

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

现场演示

#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
于 2013-11-07T05:03:11.470 回答
0

我所知道的最接近的类似物是 Boost 的zip iterator

在典型的情况下,你会使用boost::make_zip_iteratorwith boost: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 版本要冗长得多,但有时这就是生活。

于 2013-11-07T04:55:00.897 回答