循环访问C++中的对象对(或更多)

Iterating through pairs (or more) of objects in C++

本文关键字:对象 访问 C++ 循环      更新时间:2023-10-16

我知道你可以像这样循环访问一个容器:

for(double x : mycontainer) 

这类似于Python的

for x in mylist:

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

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

C++有类似的东西吗?

我知道

的最接近的东西是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
我知道的最

接近的类似物是 Boost 的 zip 迭代器。

在典型情况下,您将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版本要冗长得多,但有时这就是生活。