1、C++98 中的 传统for
循环
- 语法结构:这种形式的
for
循环由三个部分组成:初始化语句(int i = 0
)、循环条件(i < 10
)和迭代语句(i++
)。通常用于遍历一个已知大小的循环范围。 - 使用场景:适用于需要控制循环次数、迭代索引或在循环内修改循环变量的情况。
(1)传统for循环遍历普通元素或数组
示例1:遍历普通元素
for (int i = 0; i < 3; i++) {cout << i << " ";
}
示例2:使用传统的 for 循环遍历数组
#include <iostream>
using namespace std;int main() {// 使用传统的 for 循环遍历数组int arr[] = {1, 2, 3, 4, 5};int size = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < size; i++) {cout << arr[i] << " ";}cout << endl;return 0;
}
(2)传统的 for
循环遍历vector
容器
- 通过传统的
for
循环或者使用迭代器来遍历vector
等容器。 - 使用
vec[i]
可以访问元素,vec.begin()
和vec.end()
可以通过迭代器遍历容器中的元素。
#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> vec = {1, 2, 3, 4, 5};// 使用传统的 for 循环访问 vector 元素for (int i = 0; i < vec.size(); i++) {cout << vec[i] << " "; // 通过索引访问元素}cout << endl;// 使用迭代器遍历 vectorfor (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {cout << *it << " "; // 通过迭代器访问元素}cout << endl;return 0;
}
2、C++11中的范围-based for
循环
C++11 引入了范围-based for
循环,这是一种更加简洁且易于使用的语法。该语法使得程序员无需手动管理索引或迭代器,便可直接遍历容器中的每个元素。
for (int i : 容器) {cout << i << " "; // 自动遍历容器中的所有元素
}for (int i : vec) {cout << i << " "; // 自动遍历容器中的元素
}
#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> vec = {1, 2, 3, 4, 5};// 使用范围-based for 循环访问 vector 元素for (int i : vec) {cout << i << " "; // 自动遍历容器中的元素}cout << endl;return 0;
}
在 C++11 中,程序员不再需要显式地声明索引或迭代器,而是通过范围-based
for
循环直接遍历容器中的每一个元素。int i : vec
的语法简化了容器遍历的过程,并且使代码更加清晰。
3、主要区别
特性 | 范围-based for 循环 | 传统 for 循环 |
---|---|---|
语法简洁度 | 非常简洁,自动遍历容器元素 | 较为冗长,需要手动管理索引 i |
适用性 | 适用于容器遍历,尤其是不需要访问索引时 | 适用于控制循环次数或需要访问索引时 |
支持版本 | C++11 及之后的版本 | C++98 及更早版本 |
是否支持修改容器元素 | 可以修改元素(如果容器支持) | 可以修改元素 |
是否支持控制迭代条件 | 不支持,自动遍历容器中的所有元素 | 支持自定义控制循环的条件 |