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)
没有内置的方法来做到这一点.如果你能使用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)