C++ 中的 foreach 循环

简介

C++中的 foreach 循环或更具体地说,** 基于范围的for循环** 是在 ** C++11** 中引入的。这种类型的for循环结构简化了遍历可迭代数据集的过程。它通过消除初始化过程和遍历每个元素而不是迭代器来实现这一点。因此,让我们深入研究各自的** foreach** 循环结构。

Foreach循环在C++中的工作方式

因此,基本上是一个for-each 循环遍历Arradsvectors,或任何其他数据集的元素。它将当前元素的值赋给循环内声明的变量迭代器。让我们仔细看看它的语法:

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}

输出

使用自动Keyword

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}

输出

Foreach for Vectors

向量的for-each 循环的工作方式与数组相同。此外,唯一的区别是向量声明、初始化以及可以在其上执行的不同操作。

C++中Foreach循环的优缺点

1.Foreach循环的优点

  • 它消除了错误的可能性,使代码更具可读性。
  • 易于实现
  • 不需要迭代器的预初始化

2.Foreach循环的缺点

  • 无法直接访问对应的元素索引
  • 不能以逆序遍历元素
  • 它不允许用户在遍历每个元素时跳过任何元素

总结

C++ 中的** Foreach** 循环有其优缺点。代码很容易阅读,但它限制了正常的for循环提供的一些操作。因此,它完全取决于用户他/她希望循环执行什么并相应地进行选择。

参考文献

Published At
Categories with 技术
Tagged with
comments powered by Disqus