范围for的引入
int main(void) { int arr[] = { 1,2,3,4,5,6,7,8,9 }; int sz = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < sz; i++) { cout << arr[i] << " "; } return 0; }
在C++98里面遍历一个数组,或者说是一个有范围的集合而言,对应程序员来说明循环的范围是多余的。
因此C++11中引入了基于范围的for循环,for循环后面的括号由冒号“:”分为俩部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。
for(declaration : range) {}
declaration是变量声明,用于存储每次迭代中的元素值,可以是自定义的变量名,也可以是已有的变量名。
range是要遍历的容器或者迭代的对象。
【注意】与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环。
int main(void) { int arr[] = { 1,2,3,4,5,6,7,8,9 }; int sz = sizeof(arr) / sizeof(arr[0]); for (auto a : arr) { cout << a << " "; } return 0; }
范围for的使用条件
1.for循环迭代的范围必须是确定的。
(1)对于数组而言,就是数组中第一个元素和最后一个元素的范围
(2)对于类而言,应该提供begin和end的方法,begin和end就是for循环迭代的范围
2.迭代的对象要实现++和==的操作。
对于数组而言,就是数组中第一个元素和最后一个元素的范围;对于类而言,应该提供begin
和end
的方法,begin
和end
就是for
循环迭代的范围。
注意:以下代码就有问题,因为for
的范围不确定
void TestFor(int array[]) { for(auto& e : array) cout<< e <<endl; }
迭代的对象要实现++和==的操作
关于这个问题,我将在后续文章进行讲解,敬请期待,现在先了解一下基础概念
迭代器
迭代器(Iterator)是一种对象,用于遍历容器中的元素。它提供了一种统一的访问容器元素的方式,使得用户可以通过相同的方式访问不同类型的容器。
迭代器一般具有以下操作:
- 通过
*
运算符获取当前迭代器指向的元素 - 通过
++
运算符将迭代器向后移动到下一个元素 - 通过
==
运算符判断两个迭代器是否相等 - 通过
!=
运算符判断两个迭代器是否不相等
使用范围for
循环时,可以使用迭代器来表示集合的起始位置和结束位置,范围for
循环会自动遍历整个集合中的元素,不需要手动控制迭代器的移动和判断。这样就避免了使用传统的for
循环需要手动管理迭代器的复杂性。