C++ foreach循环完全指南:语法、用法与最佳实践

介绍

C++中的foreach循环,更具体地说,是range-based for循环,是在C++11中引入的。这种for循环结构简化了对可迭代数据集的遍历。它通过消除初始化过程,并遍历每一个元素而不是迭代器来实现这一点。因此,让我们深入了解相应的foreach循环结构。

C++中foreach循环的工作原理

基本上,for-each循环在数组、向量或任何其他数据集上迭代。它将当前元素的值赋给循环内声明的迭代器变量。让我们仔细看一下语法:

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

从我们可以看到的:

  • 在循环初始化期间,元素变量声明是我们需要声明将在数组或向量上迭代的变量的部分。这里,type是variable_name的数据类型。
  • array/vector name是循环将迭代的相应数据集的名称。
  • loop statements是用户可以选择使用迭代变量对相应元素执行的不同操作。

注意:建议变量的数据类型与数组或向量的数据类型保持一致。如果数据类型不一致,则元素将被进行类型转换后存储到变量中。

foreach循环的示例

C++中使用foreach循环迭代数组的示例

下面给出的代码演示了C++中使用for-each循环的用法。

#include<iostream>
using namespace std; 
int main() 
{ 
    int arr[]={1,2,3,4,5};   //数组初始化
    cout<<"元素为: ";
    for(int i : arr)
    {
    	cout<<i<<" ";
    }
    return 0;
}

输出结果:

元素为: 1 2 3 4 5

让我们来分解这段代码,逐行查看它:

  • 数组arr[]被初始化为一些值{1, 2, 3, 4, 5}
  • 在循环结构内部,’i’是存储当前数组元素值的变量
  • arr是数组名,同时也作为相应数组的基地址
  • 正如我们所看到的,每次迭代打印’i’会给我们相应的数组元素,而在普通for循环中则是数组索引

请注意:在声明变量’i’时,我们可以使用auto数据类型来代替int。这样可以确保变量的类型由数组类型推断出来,避免出现数据类型冲突。

例如:

这是文章《C++中的foreach循环》的第2部分(共3部分)。

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

输出:

使用Auto关键字的Foreach循环

以下内容需要翻译为中文:

使用Auto关键字的Foreach循环

在C++中,向量的foreach循环示例是什么?

以下代码展示了使用for-each循环迭代向量的用法:

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

输出:

向量的Foreach循环

由于限制条件以及技术问题,无法提供多个选项。

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

C++中foreach循环的优缺点

1. foreach循环的优点

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

2. foreach循环的缺点

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

结论

C++中的foreach循环有其自己的优点和缺点。代码易于阅读,但它限制了一些正常for循环提供的操作。因此,它完全取决于用户希望循环执行什么操作,然后根据需求进行选择。

参考资料

  • https://stackoverflow.com/questions/16504062/how-to-make-the-for-each-loop-function-in-c-work-with-a-custom-class
bannerAds