- C++ 基础
- C++ 首页
- C++ 概述
- C++ 环境设置
- C++ 基本语法
- C++ 注释
- C++ Hello World
- C++ 省略命名空间
- C++ 常量/字面量
- C++ 关键字
- C++ 标识符
- C++ 数据类型
- C++ 数值数据类型
- C++ 字符数据类型
- C++ 布尔数据类型
- C++ 变量类型
- C++ 变量作用域
- C++ 多个变量
- C++ 基本输入/输出
- C++ 修饰符类型
- C++ 存储类
- C++ 运算符
- C++ 数字
- C++ 枚举
- C++ 引用
- C++ 日期和时间
- C++ 控制语句
- C++ 决策
- C++ if 语句
- C++ if else 语句
- C++ 嵌套 if 语句
- C++ switch 语句
- C++ 嵌套 switch 语句
- C++ 循环类型
- C++ while 循环
- C++ for 循环
- C++ do while 循环
- C++ Foreach 循环
- C++ 嵌套循环
- C++ break 语句
- C++ continue 语句
- C++ goto 语句
- C++ 构造函数
- C++ 构造函数和析构函数
- C++ 复制构造函数
- C++ 文件处理
- C++ 文件和流
- C++ 从文件中读取
C++ 中的 Foreach 循环
Foreach 循环也称为**基于范围的**for 循环,它是一种以简单易读的方式迭代容器(如数组、向量、列表)中元素的方法,无需执行任何额外的性能操作,例如初始化、增量/减量和循环终止或退出条件。
语法
以下是 foreach 循环的语法:
for( data_type element_variable__name : container_name ){ // code to be executed }
这里,
- **element_variable_name** 是赋给存储在容器中的元素的变量名。
- **container_name** 是任何类型容器(例如数组、向量、列表等)的变量名。
Foreach 循环的工作原理?
- foreach 循环迭代给定容器的所有元素。该过程从第一个元素开始,该元素被赋值给变量,如代码中所示的 **element_variable_name**。
- 然后,循环执行 foreach 循环的主体,允许您操作或使用这些元素。
- 处理当前元素后,循环移动到容器中的下一个元素。
- 此过程重复,直到到达容器的最后一个元素。
Foreach 循环示例
在这个例子中,基于范围的 for 循环使用引用 (int& num) 允许您直接修改向量的每个元素。
#include <iostream> #include <vector> using namespace std; int main() { vector<int> digits = {10, 20, 30, 40, 50}; // Range-based for loop to modify each element for (int& num : digits) { num *= 2; // Double each number } for (int num : digits) { cout << num << " "; } cout << endl; return 0; }
输出
20 40 60 80 100
使用向量的 Foreach 循环
foreach 循环可用于迭代向量元素。
示例
在这个例子中,我们使用 foreach 循环迭代并打印向量的元素。
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers = {1, 2, 3, 4}; for (int num : numbers) { cout << num << " "; } return 0; }
输出
1 2 3 4
使用列表的 Foreach 循环
类似地,foreach 循环也可用于迭代列表元素。
示例
在这个例子中,我们使用 foreach 循环迭代并打印列表的元素。
#include <iostream> #include <list> int main() { using namespace std; list<int> numbers = {10, 20, 30, 40, 50}; for (int num : numbers) { cout << num << " "; } cout << endl; return 0; }
输出
10 20 30 40 50
For 循环与 Foreach 循环
for 循环根据给定条件执行语句集,而 foreach 循环(或基于范围的 for 循环)迭代集合元素。考虑以下示例以了解 C++ 中 for 和 foreach 的区别:
标准方法:for 循环
以下是一个 for 循环的示例,我们在此打印整数数组的元素:
#include<iostream> using namespace std; int main() { // an Array int arr[] = {1,2,3,4}; // Printing array elements using // for loop for (int i = 0; i <= 3; i++) { cout << i<<" "; } return 0; }
输出
0 1 2 3
Foreach 循环方法
以下是一个 foreach 循环的示例,我们在此迭代并打印整数数组的元素:
#include<iostream> using namespace std; int main() { int arr[] = {1,2,3,4}; // Where x is variable name provided to // elements inside container for(int x: arr) { cout<< x<<" "; } return 0; }
输出
1 2 3 4
使用非容器类型的 Foreach 循环
通常,foreach 循环用于迭代数组、向量、列表、双端队列、集合和映射等容器类型,但它也用于可迭代的非容器类型,这意味着它必须具有begin() 和 end() 方法,返回迭代器。
像向量和上面提到的所有其他传统容器都固有地满足这些要求,因此我们不需要专门为其指定 begin() 和 end()。
示例
以下示例演示了 foreach 循环与非容器类型元素一起工作的过程:
#include <iostream> #include <vector> using namespace std; class Iterable { public: // Constructor with initialization list Iterable(const vector<int>& v) : values(v) {} // Provide begin() and end() methods auto begin() const -> vector<int>::const_iterator { return values.begin(); } auto end() const -> vector<int>::const_iterator { return values.end(); } private: vector<int> values; }; int main() { Iterable myIterable({1, 2, 3, 4, 5}); for (int num : myIterable) { cout << num << " "; } cout << endl; return 0; }
输出
1 2 3 4 5
这里,
- 在上面的代码中,begin() 方法返回一个指向容器第一个元素的迭代器,而 end() 方法返回一个指向容器最后一个元素之后一个位置的迭代器。
- 然后循环使用 for() 遍历迭代器上的每个向量元素/值,并将每个值打印到控制台。
Foreach 循环的优点
以下是 C++ 中使用 Foreach 循环的优点:
- **简洁性** - 它减少了样板代码。
- **可读性** - 与旧的标准传统循环方法(如 for、while 和 do-while 循环)相比,它以一种简单易读的方式编写代码。
- **安全性** - 它减少了与索引管理和极端情况相关的错误。
Foreach 循环的局限性
以下是 foreach 循环的一些局限性:
- **仅限于正向遍历** - 它无法访问反向迭代。
- **不可中断遍历** - 在到达最后一个索引或最后一个元素之前,没有选项可以跳过任何元素或中断迭代。
- **迭代时无法直接访问元素** - 在使用 foreach 循环迭代时,无法直接访问当前元素的索引或位置。
Foreach 循环的应用
- **只读迭代** - 当用户想要迭代元素而不进行任何修改时,foreach 循环是只读迭代的好选择,因为它提供了更简洁的代码。
- **遍历容器** - 当我们想要遍历任何类型的容器(如数组、列表、向量)时,foreach 循环非常有用,因为此循环简化了遍历容器元素的过程。
- **简单的修改** - 当我们想要执行任何简单的操作时,它非常有用,因为它与旧的标准迭代代码编写方法相比,它提供了更简单、更容易和更易读的代码。
- **使用非容器类型** - 它也适用于满足可迭代要求的任何类型,其中包括 begin() 和 end()。
广告