范围for循环
概述
范围for循环(Range-based for loop)是C++11引入的一种简化循环语法,用于遍历容器(如数组、向量、列表等)中的元素。它提供了一种简洁、直观的方式来遍历集合中的每个元素,而不需要显式地使用索引或迭代器。
语法
范围for循环的基本语法如下:
for (元素类型 元素变量 : 容器) {
// 循环体
}
元素类型:表示容器中元素的类型。元素变量:表示当前遍历到的元素。容器:表示要遍历的容器对象。
示例代码
示例1:遍历数组
#include <iostream>
int main() {
int arr[] = {1, 2, 3, 4, 5};
for (int num : arr) {
std::cout << num << " ";
}
return 0;
}
输出:
1 2 3 4 5
示例2:遍历向量
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {10, 20, 30, 40, 50};
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
输出:
10 20 30 40 50
示例3:遍历字符串
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, World!";
for (char ch : str) {
std::cout << ch << " ";
}
return 0;
}
输出:
H e l l o , W o r l d !
自动类型推导
在C++11及更高版本中,可以使用auto关键字来自动推导元素类型,使代码更加简洁。
示例4:使用auto自动推导类型
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {100, 200, 300, 400, 500};
for (auto num : vec) {
std::cout << num << " ";
}
return 0;
}
输出:
100 200 300 400 500
修改容器元素
范围for循环中的元素变量默认是只读的,如果需要修改容器中的元素,可以使用引用类型。
示例5:修改容器元素
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int& num : vec) {
num *= 2; // 将每个元素乘以2
}
for (int num : vec) {
std::cout << num << " ";
}
return 0;
}
输出:
2 4 6 8 10
实践练习
练习1:计算数组元素的和
编写一个程序,使用范围for循环计算并输出数组中所有元素的和。
#include <iostream>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int sum = 0;
for (int num : arr) {
sum += num;
}
std::cout << "Sum of array elements: " << sum << std::endl;
return 0;
}
输出:
Sum of array elements: 15
练习2:统计字符串中某个字符的出现次数
编写一个程序,使用范围for循环统计字符串中某个字符的出现次数。
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, World!";
char target = 'o';
int count = 0;
for (char ch : str) {
if (ch == target) {
count++;
}
}
std::cout << "The character '" << target << "' appears " << count << " times." << std::endl;
return 0;
}
输出:
The character 'o' appears 2 times.
总结
范围for循环是C++中一种非常方便的循环结构,特别适用于遍历容器中的元素。它简化了代码,提高了可读性,并且可以通过auto关键字自动推导类型。通过引用类型,还可以方便地修改容器中的元素。掌握范围for循环的使用,将大大提高你的编程效率。
下一步
接下来,我们将学习C++中的初始化列表,它与范围for循环结合使用,可以实现更加灵活的初始化和遍历操作。