Skip to content

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控制循环流程
  • 避免在循环条件中进行昂贵操作
  • 选择最适合场景的循环类型
  • 注意防止无限循环

掌握循环语句是编程的基础技能,正确使用循环可以使代码更加简洁和高效。

本站内容仅供学习和研究使用。