C++11 引入的基于范围的 for 循环
在 C++11 中,引入了一个新的循环语句:基于范围的 for 循环(Range-based for loop),也称为“foreach”循环。相比传统的带计数器的 for 循环,基于范围的 for 循环更加直观、简洁,让代码更易读、易写、易懂。
本文将介绍 C++11 的基于范围的 for 循环的语法、用法,以及注意事项。
基于范围的 for 循环语法
基于范围的 for 循环的通用语法格式如下:
for (variable : collection) {
statement(s);
}
其中,variable
是一个变量声明,表示在循环迭代的过程中,每次将被赋予集合(如数组、容器等)中的下一个值。collection
是一个表示集合的表达式,可以是数组、容器等任何支持迭代器和begin()
和end()
函数的容器类,包括C++标准库中的容器。
在循环体内,可以使用 variable
变量来操作集合中的元素。循环在集合的末尾停止。
基于范围的 for 循环用法
这里提供几个基于范围的 for 循环的示例,以便更好地理解其用法。
示例1:遍历数组
int arr[] = {1, 2, 3, 4, 5};
for (auto i : arr) {
std::cout << i << " "; // 输出:1 2 3 4 5
}
示例2:遍历容器
std::vector<int> v = {1, 2, 3, 4, 5};
for (auto i : v) {
std::cout << i << " "; // 输出:1 2 3 4 5
}
示例3:使用引用修改集合中的元素
std::vector<int> v = {1, 2, 3, 4, 5};
for (auto& i : v) {
i *= 2;
}
for (auto i : v) {
std::cout << i << " "; // 输出:2 4 6 8 10
}
基于范围的 for 循环的注意事项
在使用基于范围的 for 循环时,需要注意以下几点:
variable
变量可以使用auto
类型推导,也可以使用明确的类型声明。- 在循环体内,
variable
变量拥有与集合中元素同样的生命周期。如果需要修改元素,可以使用引用来实现。 - 如果需要遍历的集合不支持迭代器和
begin()
和end()
函数,那么不能使用基于范围的 for 循环。 - 基于范围的 for 循环与传统的带计数器的 for 循环不同,不能通过更改循环变量来改变集合的大小和内容。
- 如果需要在循环中跳过或终止循环,仍需要使用传统的带计数器的 for 循环或类似的循环结构。
总结
基于范围的 for 循环是 C++11 中引入的新的循环语句,使用起来更加简洁、直观。它遍历集合的操作更加便捷,能够有效提高代码的可读性和可维护性。但也需要注意使用方式和注意事项,合适地使用基于范围的 for 循环可以让代码更加简洁、高效、易读。