在C++中,范围for循环(也称为基于范围的for循环)是一种简洁的方法来遍历容器(如数组、向量、列表等)中的元素。它自动处理迭代器,使得代码更加易读和简洁。范围for循环的基本语法如下:
for (declaration : collection) {statement
}
这里,declaration是一个在每次迭代中用于访问容器元素的变量,collection是你要遍历的容器。statement是每次迭代时要执行的语句。
示例1:遍历数组
#include <iostream>
int main() {int arr[] = {1, 2, 3, 4, 5};for (int &x : arr) { // 使用引用可以修改数组元素x *= 2; // 将每个元素乘以2}for (int x : arr) { // 再次遍历以查看结果std::cout << x << " ";}std::cout << std::endl;return 0;
}
示例2:遍历向量(vector)
#include <iostream>
#include <vector>
int main() {std::vector<int> vec = {10, 20, 30, 40, 50};for (int x : vec) {std::cout << x << " ";}std::cout << std::endl;return 0;
}
示例3:遍历字符串(string)
#include <iostream>
#include <string>
int main() {std::string str = "Hello";for (char c : str) {std::cout << c << " ";}std::cout << std::endl;return 0;
}
注意事项:
(1)修改元素:如果你需要在循环中修改容器中的元素,你应该使用引用(例如 int &x 或 char &c)。如果不使用引用,你将无法修改原始容器中的元素。
(2)范围for循环的限制:范围for循环只能用于容器,而不能直接用于原始数组以外的其他类型,例如原生指针数组或自定义容器(除非它们支持迭代器)。对于原生指针数组,可以使用基于范围的for循环与标准库中的begin()和end()函数配合使用,例如:for (auto &x : std::vector<int*>(arr, arr + N))。
(3)性能考虑:虽然范围for循环使得代码更易读,但在性能敏感的场景下,可能需要手动使用迭代器来优化性能。例如,在某些情况下,手动控制迭代器的生命周期可能会带来性能上的优势。然而,对于大多数日常编程任务,范围for循环的性能开销是可以接受的。
通过使用范围for循环,你可以以非常直观和简洁的方式处理容器中的元素,使得代码更加清晰和易于维护。
学习参考:
1、范围 for 循环 (C++11 引入)
2、范围 for 循环(Range-based for loop)
3、C++ 范围 for 循环详解