19.8、C++11新特性有哪些⑧【基于范围的for循环】
当我们需要完整地遍历一个有范围的集合或数组时,就可以使用基于范围的for循环。
- 它的好处是 不用程序员去写明这个集合或数组的范围,省时省力;而且形式比较简单:
for(迭代的变量:数组)
{}
- 现在我们使用范围遍历对数组进行遍历。
for(int& e: arr)//使用引用(&)的好处:1.可以避免拷贝 2.可以修改数组中每一项的值
{
std::cout << e << " ";
}
std::cout << std::endl;
- 然后我们可以在这里加入auto自动类型(C++11),遍历将会更加简单。
for (const auto& elem : arr)//如果不去修改数组中的值,建议使用const&,可以避免拷贝
{
std::cout << elem << " ";
}
std::cout << std::endl;
(使用auto修饰指针变量,那么推导出来的类型是指针解引用后的类型)
-
注意:
范围遍历不能适用于所有情况,范围遍历的条件就是循环迭代的范围必须是可确定的。
- 例如string、array、vector、list、map等都是可以正常使用的(内置类型都可以)
- 而 对于用户自定义类型,则需要提供 自增运算符重载 和 赋值运算符重载