【发布时间】:2016-11-25 01:34:14
【问题描述】:
我想将以下传统 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 : ...)
【问题讨论】:
-
如果你想以 C++11 的方式来做这件事,可以考虑使用
std::vector<std::pair<int,int>>——当然,如果元素需要独立,那就不好了。 -
在 C++17 中,结构化绑定将允许
for( auto[i, j] : expression() )。当然,expression()返回的值必须是具有两个值的聚合类型,或者是具有std::get访问器的类元组对象。在 C++11 中,您将不得不使用对。 -
好吧,如果
a和b是std::vector<int>以“交换 a 和 b 数组元素”,那么您只需要std::swap(a,b)而无需任何循环......AFAIK 远程循环可以有只有一个变量。 -
@stackoverflow.com/users/4944425/bob 感谢您温柔地提醒我不要重新发明轮子。我提供交换部分只是为了说明我对 for-each 功能的要求。