C++ 基于范围的 for 循环

2025年3月21日 | 阅读 5 分钟

在本主题中,我们将讨论 C++ 编程语言中的基于范围的 for 循环。C++ 语言在 C++11 及更高版本中引入了基于范围的 for 循环的新概念,它比常规的 for 循环要好得多。基于范围的 for 循环不需要大量的编码来实现 for 循环迭代。它是一个顺序迭代器,用于迭代容器中在一个范围(从开始到结束)内的每个元素。

Range-based for loop in C++

语法

  1. range_declaration:它用于声明一个变量,其类型与 range_expression 表示的收集元素的类型相同或对该类型的引用。
  2. range_expression:它定义了一个表示合适元素序列的表达式。
  3. loop statement:它定义了基于范围的 for 循环的主体,其中包含一个或多个语句,这些语句将重复执行直到 range-expression 的末尾。

注意:如果我们不知道容器元素的数据类型,我们可以使用 auto 关键字,它会自动识别 range_expression 的数据类型。

使用基于范围的 for 循环打印数组中每个元素的程序

让我们考虑一个使用 C++ 中基于范围的 for 循环打印 int 和 double 数组的示例。

program.cpp

输出

10 20 30 40 50
2.4 4.5 1.5 3.5 4.0

演示基于范围的 for 循环中的向量的程序

让我们编写一个简单的程序来实现基于范围的 for 循环中的向量。

Program2.cpp

输出

5 10 25 20 25

使用 C++ 中基于范围的带引用的 for 循环打印数组的程序

让我们考虑一个使用 C++ 中基于范围的 for 循环打印数组元素的示例。

Program3.cpp

输出

Before updating the elements:
1 3 -2 4 6 7 9
 After modification of the elements:
3 9 -6 12 18 21 27

嵌套的基于范围的 for 循环

当一个循环定义在另一个循环的主体内部时,该循环称为嵌套 for 循环。同样,当我们将一个范围定义在另一个基于范围的循环内部时,这种技术被称为嵌套的基于范围的 for 循环。

语法

在上面的语法中,我们定义了一个基于范围的 for 循环在另一个循环内部。这里我们称之为 C++ 中的内层和外层基于范围的 for 循环。

C++ 中打印嵌套的基于范围的 for 循环的程序

考虑一个在 C++ 编程语言中演示嵌套的基于范围的 for 循环的示例。

Range.cpp

输出

x = 0 and j = 1
 x = 0 and j = 2
 x = 0 and j = 3
 x = 0 and j = 4
 x = 0 and j = 5
 x = 1 and j = 1
 x = 1 and j = 2
 x = 1 and j = 3
 x = 1 and j = 4
 x = 1 and j = 5
 x = 2 and j = 1
 x = 2 and j = 2
 x = 2 and j = 3
 x = 2 and j = 4
 x = 2 and j = 5
 x = 3 and j = 1
 x = 3 and j = 2
 x = 3 and j = 3
 x = 3 and j = 4
 x = 3 and j = 5

传统 for 循环和基于范围的 for 循环有什么区别?

传统的 for 循环用于重复执行代码块,直到指定条件为真。传统的 for 循环有三个参数:变量的初始化、条件的指定以及最后一个计数器,如果条件保持为真,计数器将递增。

语法

基于范围的循环

另一方面,C++ 11 及更高版本中提供了一个新的基于范围的 for 循环。它有两个参数:范围声明和范围表达式。它也用于在一个范围内重复执行代码块。

语法

range_declaration 用于声明与 range_expression(容器)相关的变量类型。range_expression:它就像一个容器,以顺序方式保存相同类型的元素。loop_statement 定义了在 for 循环内部执行的语句。

基于范围的 for 循环的优点

  1. 它易于使用,并且语法也简单。
  2. 基于范围的 for 循环不需要计算容器中元素的数量
  3. 它识别容器的起始和结束元素。
  4. 我们可以轻松修改容器的大小和元素。
  5. 它不创建元素的任何副本。
  6. 它比传统的 for 循环快得多。
  7. 它通常使用 auto 关键字来识别容器元素的数据类型。

基于范围的 for 循环的缺点

  1. 它无法遍历列表的一部分。
  2. 它不能用于反向遍历
  3. 它不能用于指针。
  4. 它不提供当前元素的索引。