在C98中,不同容器和数组、遍历方法不尽相同,写法不统一,也不够简洁,而C++11基于范围的for循环以统一、简洁的方式来遍历容器和数组,用起来更方便了。
以下是基于范围for循环的一般格式 ElemType:范围变量的数据类型 val:范围变量的名称 array:是要让该循环进行处理的数组(容器)的名称
for(ElemType val : array)
{
;//statement 循环体
}
1.示例:
int main()
{
int ar[] = { 1,2,3,4,5,6,7,8,9 };
for (int &x : ar)
{
cout << x << " ";
x += 10;//值传递,下面再打印不会变,如果是引用,会变
}
cout << endl;
for (int x : ar)
{
cout << x << " ";
}
cout << endl;
}
2.可以用auto自动推导出val的数据类型
int main()
{
int ar[] = { 12,23,34,45,56,67,78 };
char str[] = { 'a','b','c','d','e' };
double dx[] = { 1.2,2.3,3.4,4.5,5.6,6.7,7.8,8.8,9.8 };
for (const auto& x : ar)
{
cout << x << " ";
}
cout << endl;
for (const auto& x : str)
{
cout << x << " ";
}
cout << endl;
for (const auto& x : dx)
{
cout << x << " ";
}
}
3.采用auto可以自动推导数组大小和数组元素类型,采用引用时必须指定大小
int main()
{
int ar[] = { 12,23,34,45,56,56,67,78 };
int* ip = ar;
int(&br1)[] = ar;//error
int(&br)[8] = ar;//引用需要给出大小
auto& cr = ar;//auto自动推导数组大小 数组类型
for (auto x : br)
{
cout << x << " ";
}
cout << endl;
return 0;
}