范围for的语法
在 C++98 中如果要遍历一个数组
void TestFor()
{
int array[] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)array[i] *= 2;
for (int* p = array; p < array + sizeof(array)/ sizeof(array[0]); ++p)cout << *p << endl;
}
对于一个 有范围的集合 而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。C++11中引入了基于范围的 for 循环。
for 循环后的括号由冒号 “ : ” 分为两部分:第一部分是范 围内用于迭代的变量,第二部分则表示被迭代的范围 。
void TestFor()
{
int array[] = { 1, 2, 3, 4, 5 };
for(auto& e : array) 想要改变数组数据必须使用引用,x是数组每个元素的别名,x的改变会影响数组e *= 2;
for(auto e : array)cout << e << " ";
return 0;
}
与普通循环类似,可以用 continue 来结束本次循环,也可以用 break 来跳出整个循环 。
范围for的使用条件
1. for循环迭代的范围必须是确定的
对于数组而言,就是数组中第一个元素和最后一个元素的范围 ;对于类而言,应该提供
begin 和 end 的方法, begin 和 end 就是 for 循环迭代的范围。
以下代码就有问题,因为 for的范围不确定
也可以说 函数的形参没有数组的概念,不能把形参定为数组,应是指针
使用
int main()
{int array[] = { 1, 2, 3, 4, 5 };for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)array[i] *= 2; //每个值×2for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)cout << array[i] << " ";cout << endl;for (auto& x : array) 想要改变数组数据必须使用引用,x是数组每个元素的别名,x的改变会影响数组{x *= 2; 每个值×2}范围for依次取数组中的数据赋值给e自动判断结束自动迭代for (auto e : array){cout << e << " ";}cout << endl;return 0;
}