C++ 循环语句
概述
循环是编程中的基本控制结构,允许程序重复执行一段代码直到满足特定条件。C++提供了三种主要的循环类型:for循环、while循环和do-while循环。
🔄 循环类型概览
mermaid
graph TD
A[C++循环语句] --> B[for循环]
A --> C[while循环]
A --> D[do-while循环]
B --> B1[基本for循环]
B --> B2[范围for循环]
C --> C1[条件在开始检查]
D --> D1[条件在末尾检查]
D --> D2[至少执行一次]📊 for循环
基本for循环语法
cpp
#include <iostream>
int main() {
// 基本for循环语法: for(初始化; 条件; 递增)
std::cout << "=== 基本for循环 ===" << std::endl;
// 打印数字1到5
for (int i = 1; i <= 5; i++) {
std::cout << "数字: " << i << std::endl;
}
// 倒序打印
for (int i = 5; i >= 1; i--) {
std::cout << "倒序: " << i << std::endl;
}
// 步长为2
for (int i = 0; i <= 10; i += 2) {
std::cout << "偶数: " << i << std::endl;
}
return 0;
}范围for循环 (C++11)
cpp
#include <iostream>
#include <vector>
#include <map>
int main() {
// 1. 数组的范围for循环
int numbers[] = {1, 2, 3, 4, 5};
for (int num : numbers) {
std::cout << "数字: " << num << std::endl;
}
// 2. vector的范围for循环
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (const std::string& name : names) {
std::cout << "姓名: " << name << std::endl;
}
// 3. 修改元素
std::vector<int> values = {1, 2, 3, 4, 5};
for (int& value : values) {
value *= 2; // 每个元素乘以2
}
// 4. map的范围for循环
std::map<std::string, int> ages = {{"Alice", 25}, {"Bob", 30}};
for (const auto& [name, age] : ages) { // C++17结构化绑定
std::cout << name << "的年龄: " << age << std::endl;
}
return 0;
}嵌套for循环
cpp
#include <iostream>
int main() {
// 1. 打印乘法表
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
std::cout << i << "×" << j << "=" << (i * j) << "\t";
}
std::cout << std::endl;
}
// 2. 打印星号三角形
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
std::cout << "* ";
}
std::cout << std::endl;
}
return 0;
}🔁 while循环
基本while循环
cpp
#include <iostream>
int main() {
// 1. 基本while循环
int count = 1;
while (count <= 5) {
std::cout << "计数: " << count << std::endl;
count++;
}
// 2. 用户输入控制的循环
char choice = 'y';
int iteration = 0;
while (choice == 'y' && iteration < 3) {
iteration++;
std::cout << "第" << iteration << "次迭代" << std::endl;
// 模拟用户输入
if (iteration >= 2) choice = 'n';
}
return 0;
}while循环应用示例
cpp
#include <iostream>
// 简单菜单系统
void showMenu() {
std::cout << "\n=== 菜单 ===" << std::endl;
std::cout << "1. 显示信息" << std::endl;
std::cout << "2. 计算平方" << std::endl;
std::cout << "0. 退出" << std::endl;
}
int main() {
int choice = -1;
while (choice != 0) {
showMenu();
// 模拟用户输入
static int demo_choices[] = {1, 2, 0};
static int demo_index = 0;
choice = demo_choices[demo_index++];
std::cout << "选择: " << choice << std::endl;
switch (choice) {
case 1:
std::cout << "显示系统信息..." << std::endl;
break;
case 2:
std::cout << "5的平方是: " << (5 * 5) << std::endl;
break;
case 0:
std::cout << "退出程序..." << std::endl;
break;
default:
std::cout << "无效选择!" << std::endl;
}
}
return 0;
}🔂 do-while循环
基本do-while循环
cpp
#include <iostream>
int main() {
// 1. 基本do-while循环
int count = 1;
do {
std::cout << "计数: " << count << std::endl;
count++;
} while (count <= 5);
// 2. 条件为false时也会执行一次
int never_true = 10;
do {
std::cout << "这行会执行一次,即使条件为false" << std::endl;
} while (never_true < 5);
// 3. 输入验证示例
int user_input;
int demo_inputs[] = {-1, 0, 5}; // 模拟用户输入
int input_index = 0;
do {
user_input = demo_inputs[input_index++];
std::cout << "输入数字(1-10): " << user_input << std::endl;
if (user_input < 1 || user_input > 10) {
std::cout << "无效输入,请重试!" << std::endl;
}
} while (user_input < 1 || user_input > 10);
std::cout << "输入有效: " << user_input << std::endl;
return 0;
}🎮 循环控制语句
break和continue
cpp
#include <iostream>
int main() {
// 1. break语句 - 跳出循环
std::cout << "=== break示例 ===" << std::endl;
for (int i = 1; i <= 10; i++) {
if (i == 5) {
std::cout << "遇到5,跳出循环" << std::endl;
break;
}
std::cout << "i = " << i << std::endl;
}
// 2. continue语句 - 跳过当前迭代
std::cout << "\n=== continue示例 ===" << std::endl;
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
std::cout << "奇数: " << i << std::endl;
}
// 3. 在嵌套循环中使用break
std::cout << "\n=== 嵌套循环中的break ===" << std::endl;
for (int i = 1; i <= 3; i++) {
std::cout << "外层 i = " << i << std::endl;
for (int j = 1; j <= 5; j++) {
if (j == 3) {
std::cout << " 内层到达3,跳出内层循环" << std::endl;
break; // 只跳出内层循环
}
std::cout << " 内层 j = " << j << std::endl;
}
}
return 0;
}🚀 循环最佳实践
性能和可读性优化
cpp
#include <iostream>
#include <vector>
int main() {
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
// 1. 优先使用范围for循环(推荐)
std::cout << "=== 范围for循环(推荐) ===" << std::endl;
for (const auto& name : names) {
std::cout << name << std::endl;
}
// 2. 避免在循环条件中重复计算
std::cout << "\n=== 优化循环条件 ===" << std::endl;
// 不好的做法:每次都计算size()
// for (int i = 0; i < names.size(); i++) { ... }
// 好的做法:缓存size值
const int size = names.size();
for (int i = 0; i < size; i++) {
std::cout << names[i] << std::endl;
}
// 3. 选择合适的循环类型
std::cout << "\n=== 循环类型选择指南 ===" << std::endl;
std::cout << "for循环: 已知迭代次数" << std::endl;
std::cout << "while循环: 未知迭代次数,条件在开始检查" << std::endl;
std::cout << "do-while循环: 需要至少执行一次" << std::endl;
return 0;
}常见循环模式
cpp
#include <iostream>
#include <vector>
int main() {
// 1. 遍历模式
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (const int& num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
// 2. 累加模式
int sum = 0;
for (int num : numbers) {
sum += num;
}
std::cout << "总和: " << sum << std::endl;
// 3. 查找模式
int target = 3;
bool found = false;
for (int num : numbers) {
if (num == target) {
found = true;
break;
}
}
std::cout << "找到" << target << ": " << (found ? "是" : "否") << std::endl;
// 4. 过滤模式
std::cout << "偶数: ";
for (int num : numbers) {
if (num % 2 == 0) {
std::cout << num << " ";
}
}
std::cout << std::endl;
return 0;
}📋 循环选择指南
循环类型对比
| 循环类型 | 适用场景 | 优点 | 注意事项 |
|---|---|---|---|
| for循环 | 已知迭代次数 | 结构清晰 | 避免条件中重复计算 |
| 范围for | 遍历容器 | 代码简洁 | C++11及以上 |
| while循环 | 条件控制 | 灵活性好 | 防止无限循环 |
| do-while | 至少执行一次 | 保证执行 | 确保循环会终止 |
性能考虑
cpp
// 1. 缓存容器大小
const int size = container.size();
for (int i = 0; i < size; i++) { ... }
// 2. 使用const引用避免拷贝
for (const auto& item : container) { ... }
// 3. 选择合适的迭代方式
for (auto it = container.begin(); it != container.end(); ++it) { ... }总结
C++循环语句提供了灵活而强大的重复执行机制:
核心要点
- for循环:适合已知次数的迭代,结构清晰
- 范围for循环:现代C++推荐的容器遍历方式
- while循环:适合条件控制的循环
- do-while循环:确保至少执行一次的场景
最佳实践
- 优先使用范围for循环遍历容器
- 合理使用break和continue控制循环流程
- 避免在循环条件中进行昂贵操作
- 选择最适合场景的循环类型
- 注意防止无限循环
掌握循环语句是编程的基础技能,正确使用循环可以使代码更加简洁和高效。