gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:10:36 27 4
gpt4 key购买 nike

我想将以下传统的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com