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

C++ 中 基于范围的 for 循环的工作
基于范围的 for 循环的工作原理

示例 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

在这个例子中,我们声明并初始化了一个名为 numArrayint 数组.  在这里,我们使用基于范围的 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++ 指针中了解更多信息。

C++ 中基于范围的 for 循环中使用地址
C++ 中基于范围的 for 循环中使用地址

注意: 如果我们不在循环内修改数组/Vector/集合,最好在范围声明中使用 const 关键字。

// collection is not modified in the loop
for (const int &var : num) {
    // code
}