C++ 基于范围的 for 循环
在本教程中,我们将借助示例了解 C++ 基于范围的 for 循环及其最佳实践。
C++11 引入了基于范围的 for
循环。此 for
循环专门用于数组和Vector等集合。
例如,
// 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
循环打印出元素数组.
- 第一次迭代-
n
取数组第 1 个成员的值,即1
- 第二次迭代-
n
取数组第 1 个成员的值,即2
- …一次类推
注意: 基于范围的 for 循环自动从头到尾迭代数组。我们不需要指定循环中的迭代次数。
示例 2:使用基于范围的 for 循环遍历 Vector
#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
循环的常用方法,它的工作方式与我们使用实际数组或 Vector 的变量相同。
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
- 在每次迭代中都复制每个元素数到变量var
。这对计算机内存不利。int &var : num
- 在每次迭代中不用复制每个元素数到变量var
。相反,直接从num
中访问元素。这样更有效率。
**注意:**运算 &
符称为地址运算符。我们将在C++ 指针中了解更多信息。
注意: 如果我们不在循环内修改数组/Vector/集合,最好在范围声明中使用 const
关键字。
// collection is not modified in the loop
for (const int &var : num) {
// code
}