Mal*_*wal 0 c++ for-loop c++11 range-based-loop
我很困惑 C++ 中的 for 循环和 for every 循环之间有什么区别。我阅读了教程和一些书籍,但我还没有看到每个循环有何不同。对于数组,我看到的示例似乎建议每个循环一次循环遍历整个元素。这可能是基于范围的循环所具有的特殊优势吗?
主要区别在于普通的 for 循环使用一个附加变量作为数组内的索引,并且具有循环范围,您可以自己编写 for 循环的条件。
例如,假设您需要输出数组的所有偶数元素,或者直到遇到零值元素。你可以写
#include <iostream>
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 12 };
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N && a[i] != 0; i++ )
{
if ( a[i] % 2 == 0 ) std::cout << i << ": " << a[i] << '\n';
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序输出是
1: 2
3: 4
5: 6
7: 8
Run Code Online (Sandbox Code Playgroud)
如何使用基于范围的 for 循环来做到这一点?对于循环之前的初学者,您需要声明一个充当索引角色的变量。这样做的一个缺点是变量没有在使用它的范围内声明。
另外,要停止循环的迭代,您需要在循环中使用break语句。这也使得代码更加复杂。
将上面的程序与这个进行比较
#include <iostream>
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 12 };
const size_t N = sizeof( a ) / sizeof( *a );
size_t i = 0;
for ( const auto &item : a )
{
if ( item == 0 )
{
break;
}
else if ( item % 2 == 0 )
{
std::cout << i << ": " << item << '\n';
}
++i;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通常,要使用基于范围的 for 循环,所使用的容器应具有成员函数begin和end/或通用函数begin,并且end应支持该容器。对于数组begin和end均值表达式a和a + N.
| 归档时间: |
|
| 查看次数: |
3063 次 |
| 最近记录: |