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;
}
输出:

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

在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;
}
输出:

由于限制条件以及技术问题,无法提供多个选项。
对于向量,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