作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想将以下传统的 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];
}
是否存在任何方法可以在 C++11 for-each 循环中提供多个变量,例如:
for (int i, int j : ...)
最佳答案
没有内置的方法可以做到这一点。如果可以使用 Boost,boost::combine
将同时迭代两个(或更多)范围( Does boost offer make_zip_range? , How can I iterate over two vectors simultaneously using BOOST_FOREACH? ):
for (boost::tuple<int&, int&> ij : boost::combine(a, b)) {
int& i = boost::get<0>(ij);
int& j = boost::get<1>(ij);
// ...
}
不幸的是,访问压缩范围的元组元素中的元素非常冗长。 C++17 将使用结构化绑定(bind)使其更具可读性:
for (auto [&i, &j] : boost::combine(a, b)) {
// ...
}
因为您不需要跳出循环或从封闭函数返回,您可以使用 boost::range::for_each
将循环体作为 lambda:
boost::range::for_each(a, b, [](int& i, int& j)
{
// ...
});
关于C++11 用于每个具有多个变量的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38504558/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!