auto关键字和基于范围的for循环
auto关键字
1. auto关键字的用法
auto关键字是一个非常方便的定义函数类型的一个关键字,我们在写很多项目的时候,有的变量类型就会变得非常长,比如
std::map < std ::string, std::string>::iterator it = m.begin();
其中的 std::map < std ::string, std::string>::iterator 就是一个类型,而我们在重复调用这个变量的时候如果纯靠手打是非常麻烦的,这时候就需要auto关键字了,只需要给auto所定义的变量赋值,那么auto所定义的变量就会自动识别,例如上面的代码中,把it赋值于auto所定义的变量,那编译器就会自动匹配,举个例子:
auto a = it ;
上面代码中的a就会和it的类型相同,均为 std::map < std ::string, std::string>::iterator
2. 注意点
- 用auto声明指针类型时,用auto和auto * 是一样的,但是用auto声明引用同类型时则必须加上&
- 在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器会报错,因为编译器实际只会对第一个类型进行推导,然后用推导出来的类型定义其他变量
- auto不能作为函数的参数
- auto不能直接用来声明数组
基于范围的for循环
范围for的用法
范围for是C++11中引入的一种新的for循环,for循环后的括号由冒号 : 分为两部分,第一部分是范围内用于迭代的变量 ,第二部分则表示被迭代的范围,底层实际上是用了迭代器,举个例子,当我们使用C语言的方法来遍历一个数组并打印时,我们的写法是这样的:
int arr[] = { 3 , 3 , 5 , 5 , 6 };
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << arr[i] << " ";
}
cout << endl;
运行结果如下:
用了范围for的写法如下:
int arr[] = { 3 , 3 , 5 , 5 , 6 };
for (auto i : arr) //这里结合刚才说的auto会更加方便
{
cout << i << " ";
}
cout << endl;
运行结果:
完结~❀❀❀