C++11 引入了范围 for
循环。这种 for
循环专门用于诸如**数组**和**向量**之类的集合。
例如,
// initialize an int array
int num[3] = {1, 2, 3};
// use of ranged for loop
for (int var : num) {
// code
}
在这里,范围 for
循环迭代数组 num 从开头到结尾。int
变量 var 在每次迭代中存储数组元素的值。
它的语法是:
for (rangeDeclaration : rangeExpression) {
// code
}
在上面的例子中:
- rangeDeclaration -
int var
- rangeExpression - num

示例 1:使用数组的范围 for 循环
#include <iostream>
using namespace std;
int main() {
// initialize array
int numArray[] = {1, 2, 3, 4, 5};
// use of ranged for loop to print array elements
for (int n : numArray) {
cout << n << " ";
}
return 0;
}
输出
1 2 3 4 5
在此示例中,我们声明并初始化了一个名为 numArray 的 int
数组。在这里,我们使用范围 for
循环打印 numArray 的元素。
- 第一次迭代 - n 获取数组第一个成员的值,即
1
- 第二次迭代 - n 获取
2
的值,然后打印 - ...等等。
注意: 范围 for
循环会自动从头到尾迭代数组。我们不需要在循环中指定迭代次数。
示例 2:使用向量的 C++ 范围 for 循环
#include <iostream>
#include <vector>
using namespace std;
int main() {
// declare and initialize vector
vector<int> num_vector = {1, 2, 3, 4, 5};
// print vector elements
for (int n : num_vector) {
cout << n << " ";
}
return 0;
}
输出
1 2 3 4 5
示例 3:在循环中声明集合
#include <iostream>
using namespace std;
int main() {
// define the collection in the loop itself
for (int n : {1, 2, 3, 4, 5}) {
cout << n << " ";
}
return 0;
}
输出
1 2 3 4 5
在这里,我们在循环本身内声明了集合,即:
rangeExpression = {1, 2, 3, 4, 5}
这也是使用范围 for
循环的有效方法,并且它的工作方式与使用实际数组或向量时相同。
C++ 范围 for 循环最佳实践
在上面的示例中,我们在 for
循环中声明了一个变量,以在每次迭代中存储集合的每个元素。
int num[3] = {1, 2, 3};
// copy elements of num to var
for (int var : num) {
// code
}
但是,最好这样编写**基于范围的 for 循环**:
// access memory location of elements of num
for (int &var : num) {
// code
}
注意 var 前面的 &
。此处:
int var : num
- 在每次迭代中将 num 的每个元素复制到 var 变量。这不利于计算机内存。int &var : num
- 不会将 num 的每个元素复制到 var。而是直接从 num 本身访问 num 的元素。这更有效。
注意: &
运算符被称为引用运算符。我们将在 C++ 指针中了解更多关于它的信息。

注意: 如果我们在循环中不修改数组/向量/集合,最好在范围声明中使用 const
关键字。
// collection is not modified in the loop
for (const int &var : num) {
// code
}