我知道您可以像这样遍历容器:
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 iterator。
在典型的情况下,你会使用boost::make_zip_iterator
with 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 版本要冗长得多,但有时这就是生活。