C++中的foreach循环

时间:2020-02-23 14:29:57  来源:igfitidea点击:

介绍

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

C++中的foreach循环工作

因此,基本上每个循环都遍历数组,向量或者任何其他数据集的元素。
它将当前元素的值分配给循环内声明的变量迭代器。
让我们仔细看一下语法:

for(type variable_name : array/vector_name)
{
  loop statements
  ...
}

如我们所见:

  • 在循环初始化期间,元素变量声明是我们需要声明将在数组或者向量上迭代的变量的部分。
    其中"类型"是variable_name的数据类型
  • 数组/向量名称是循环将在其上进行迭代的各个数据集的名称,
  • 循环语句是用户可以使用迭代变量选择对相应元素执行的不同操作。

注意:建议使变量的数据类型与数组或者向量的数据类型相同。
如果数据类型不同,则元素将被类型转换,然后存储到变量中。

foreach循环的例子

1. C++中的数组foreach循环示例

下面给出的代码说明了C++中for-each循环的用法,

#include<iostream>
using namespace std; 
int main() 
{ 
  int arr[]={1,2,3,4,5};   //array initialization
  cout<<"The elements are: ";
  for(int i : arr)
  {
  	cout<<i<<" ";
  }
  return 0;
}

输出:

The elements are: 1 2 3 4 5

让我们分解代码并逐行查看:

  • 数组arr []初始化为一些值{1,2,3,4,5}
  • 在循环结构中," i"是存储当前数组元素值的变量
  • " arr"是数组名称,它也用作相应数组的基址
  • 如我们所见,在正常for循环的情况下,每次迭代打印" i"都会为我们提供与数组索引相反的相应数组元素

请注意:在声明变量" i"时,我们也可以使用"自动"数据类型代替" int"。
这样可以确保从数组类型推导变量的类型,并且不会发生数据类型冲突。

例如:

#include<iostream>
using namespace std; 
int main() 
{ 
  int array[]={1,4,7,4,8,4};
  cout<<"The elements are: ";
  for(auto var : array)
  {
  	cout<<var<<" ";
  }
  return 0;
}

输出:

Foreach循环使用自动数据类型

2. C++中向量的foreach循环示例

以下代码说明了for-each循环在" vector"上迭代的用法。

#include<iostream>
#include<vector>
using namespace std; 
int main() 
{ 
  vector<int> vec={11,22,33,44,55,66};
  cout<<"The elements are: ";
  for(auto var : vec)
  {
  	cout<<var<<" ";
	}
  return 0;
}

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

C++中foreach循环的优缺点

1. foreach循环的优点

  • 它消除了错误的可能性,并使代码更具可读性。

  • 易于实施

  • 不需要预初始化迭代器

2. foreach循环的缺点

  • 无法直接访问相应的元素索引
  • 无法以相反顺序遍历元素
  • 不允许用户跳过任何元素,因为它们遍历了每个元素