简介
C++中的 foreach 循环或更具体地说,** 基于范围的for循环** 是在 ** C++11** 中引入的。这种类型的for循环结构简化了遍历可迭代数据集的过程。它通过消除初始化过程和遍历每个元素而不是迭代器来实现这一点。因此,让我们深入研究各自的** foreach** 循环结构。
Foreach循环在C++中的工作方式
因此,基本上是一个for-each 循环遍历Arrads、vectors,或任何其他数据集的元素。它将当前元素的值赋给循环内声明的变量迭代器。让我们仔细看看它的语法:
1for(type variable_name : array/vector_name)
2{
3 loop statements
4 ...
5}
正如我们所看到的:
- 在循环初始化过程中, 元素变量声明** 是我们需要声明将迭代数组或向量的变量的部分。这里的
type
是** Variable_NAME** 的数据类型 - 数组/向量名称 是循环将迭代的相应数据集的名称,
- 循环语句 是用户可以选择使用迭代变量对相应元素执行的不同操作。
注意: 建议保持变量的数据类型与数组或向量的数据类型相同。如果数据类型不同,则元素将被类型转换,然后存储到变量中。
Foreach循环示例
1.C++中数组的Foreach循环示例
下面给出的代码说明了C++中for-each 循环的用法,
1#include<iostream>
2using namespace std;
3int main()
4{
5 int arr[]={1,2,3,4,5}; //array initialization
6 cout<<"The elements are: ";
7 for(int i : arr)
8 {
9 cout<<i<<" ";
10 }
11 return 0;
12}
输出 :
1The elements are: 1 2 3 4 5
让我们分解代码,并逐行查看它:
- 数组
arr[]
用一些值初始化 {1,2,3,4,5}** - 在循环结构中, ‘i’** 是存储当前数组元素的值的变量
arr
是数组名称,也是相应数组的基地址- 正如我们所看到的,在正常for循环的情况下,为每个迭代打印 ‘i’** 会给出相应的数组元素,而不是数组索引
请注意 :在声明变量‘** i** ’时,我们也可以使用auto
数据类型,而不是int
。这确保变量的类型是从数组类型推导出来的,并且不会发生数据类型冲突。
例如:
1#include<iostream>
2using namespace std;
3int main()
4{
5 int array[]={1,4,7,4,8,4};
6 cout<<"The elements are: ";
7 for(auto var : array)
8 {
9 cout<<var<<" ";
10 }
11 return 0;
12}
输出 :
2.C++中向量的Foreach循环示例
下面的代码说明了如何使用for-each 循环在vetor
上迭代。
1#include<iostream>
2#include<vector>
3using namespace std;
4int main()
5{
6 vector<int> vec={11,22,33,44,55,66};
7 cout<<"The elements are: ";
8 for(auto var : vec)
9 {
10 cout<<var<<" ";
11 }
12 return 0;
13}
输出 :
向量的for-each 循环的工作方式与数组相同。此外,唯一的区别是向量声明、初始化以及可以在其上执行的不同操作。
C++中Foreach循环的优缺点
1.Foreach循环的优点
- 它消除了错误的可能性,使代码更具可读性。
- 易于实现
- 不需要迭代器的预初始化
2.Foreach循环的缺点
- 无法直接访问对应的元素索引
- 不能以逆序遍历元素
- 它不允许用户在遍历每个元素时跳过任何元素
总结
C++ 中的** Foreach** 循环有其优缺点。代码很容易阅读,但它限制了正常的for循环提供的一些操作。因此,它完全取决于用户他/她希望循环执行什么并相应地进行选择。