一、语法概念
在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)//auto& e表示引用,此时e是array的别名,可以进行修改
e*=2;
for(auto e : array)//auto e表示e是a的范围内迭代,不能修改其内容
cout << e << " ";
return 0;
}
二、范围for使用条件
1.for循环迭代的范围必须是确定的
对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin和end的
方法,begin和end就是for循环迭代的范围(迭代器)。
注意:以下代码就有问题,因为此时 a 不是一个数组,而是是一个指针,for的范围不确定。
void TestFor(int a[])
{
for(auto& e: a)
cout<<e<<endl;
}
2. 迭代的对象要实现++和==的操作。