具有多个变量的每个循环的C++ 11

Ses*_*i R 3 c++ for-loop c++11

我想将以下传统的for循环转换为C++ 11 for-each循环,而不需要额外的循环结构:

int a[] = { 5, 6, 7, 8, 9, 10 };
int b[] = { 50, 60, 70, 80, 90, 100 };

// Swap a and b array elements 
for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
{
   a[i] ^= b[i]; b[i] ^= a[i]; a[i] ^= b[i];
}
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以在C++ 11 for-each循环中提供多个变量,如:

for (int i, int j : ...)
Run Code Online (Sandbox Code Playgroud)

eca*_*mur 5

没有内置的方法来做到这一点.如果你能使用Boost,boost::combine将为迭代两个(或更多)的范围同时工作(不提升报价make_zip_range? ,我怎样可以遍历同时两个矢量使用BOOST_FOREACH? ):

for (boost::tuple<int&, int&> ij : boost::combine(a, b)) {
    int& i = boost::get<0>(ij);
    int& j = boost::get<1>(ij);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,访问压缩范围的元组元素中的元素非常冗长.C++ 17将使用结构化绑定使其更具可读性:

for (auto [&i, &j] : boost::combine(a, b)) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

由于您不需要突破循环或从封闭函数返回,因此您可以boost::range::for_each将循环体用作lambda:

boost::range::for_each(a, b, [](int& i, int& j)
{
    // ...
});
Run Code Online (Sandbox Code Playgroud)