C++ 基于范围的 for 循环

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
Working of Ranged for Loop in C++
C++ 中范围 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 循环打印 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++ 指针中了解更多关于它的信息。

Working of Address Pointing in Ranged for Loop in C++
C++ 范围 for 循环中的地址指针工作原理

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

// collection is not modified in the loop
for (const int &var : num) {
    // code
}
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战