🎈归属专栏:浅尝C++
🚗个人主页:Jammingpro
🐟记录一句:再写两篇博客就休息
文章前言:本篇文章简要介绍范围for,介绍每个小点时,都会附上对应的代码,如果可能的话。
传统for循环
在C++98中如果要遍历一个数组,可以按照以下方式进行👇
int printArray()
{
int arr[] = {1, 2, 3};
for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
cout << arr[i] << endl;
}
sizeof(arr) / sizeof(arr[0])
完全可以计算出数组的长度,让程序员重复书写i < sizeof(arr) / sizeof(arr[0])
好像有点多余,不能让系统自动帮我们写吗?
范围for的语法
对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。👇
void printArray()
{
int arr[] = {1, 2, 3};
for(int num : arr)//如果不需要修改arr中的值,可以不适用引用类型
cout << num << endl;
}
void doubleNum()
{
int arr[] = {1, 2, 3};
for(int& num : arr)//如果需要修改arr中的值,需要改为引用类型
num *= 2;
}
上面的代码中,范围for的:
前的变量类型可以使用auto
进行自动类型推导,这样使用会更方便[关于auto关键字的介绍👉传送门]
注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环。
范围for的使用条件
for循环迭代的范围必须是确定的。对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围。
注意:以下代码就有问题,由于数组在传递给函数时被转换为指针,而指针不具备容器的特性,因此无法进行范围for循环。👇
void printArray(int arr[])
{
for(auto& num : arr)
cout << num << endl;
}
简而言之,在将数组传递给上述函数的时候,即使在函数内使用sizeof(arr) / sizeof(arr[0])
也无法计算出原数组的长度。
文章结语:这篇文章对C++中的范围for进行了简要的介绍。
🎈欢迎进入浅尝C++专栏,查看更多文章。
如果上述内容有任何问题,欢迎在下方留言区指正b( ̄▽ ̄)d