我知道你可以迭代这样的容器:
for(double x : mycontainer)
类似于Python的
for x in mylist:
但是,有时我需要访问具有相同索引的另一个容器中的元素,并且我必须创建一个普通的for循环。在Python中,或者,我可以(对于两个或更多列表):
for (x,y) in zip(xlist, ylist):
C ++中有类似内容吗?
答案 0 :(得分:2)
我知道的最近的事情是boost::combine
(但是,我没有看到它的文档 - 实际上,有trac ticket用于添加它)。它在内部使用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
答案 1 :(得分:0)
我所知道的最接近的模拟是Boost的zip iterator。
在典型情况下,您使用boost::make_zip_iterator
和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版本更加冗长,但有时候这就是生活。