跳转到内容

C++ 嵌套循环

来自代码酷

C++嵌套循环是指在循环结构(如`for`、`while`或`do-while`)内部再包含另一个循环结构的编程技术。嵌套循环常用于处理多维数据(如矩阵、表格)或需要多重迭代的场景。本文将详细讲解嵌套循环的语法、执行流程、实际应用及优化技巧。

基本语法与执行流程[编辑 | 编辑源代码]

嵌套循环的语法与普通循环类似,但内层循环会作为外层循环体的一部分。以下是一个典型的`for`循环嵌套示例:

  
#include <iostream>  
using namespace std;  

int main() {  
    // 外层循环控制行  
    for (int i = 1; i <= 3; i++) {  
        // 内层循环控制列  
        for (int j = 1; j <= 3; j++) {  
            cout << "(" << i << "," << j << ") ";  
        }  
        cout << endl; // 换行  
    }  
    return 0;  
}

输出:

  
(1,1) (1,2) (1,3)  
(2,1) (2,2) (2,3)  
(3,1) (3,2) (3,3)  

执行流程说明: 1. 外层循环初始化`i=1`,检查条件`i<=3`。 2. 进入内层循环,`j`从1迭代到3,打印坐标。 3. 内层循环结束后,外层循环`i++`,重复上述过程,直到`i>3`。

流程图[编辑 | 编辑源代码]

flowchart TD A[开始] --> B[外层循环初始化 i=1] B --> C{i <= 3?} C -->|是| D[内层循环初始化 j=1] D --> E{j <= 3?} E -->|是| F[打印(i,j)] F --> G[j++] G --> E E -->|否| H[换行] H --> I[i++] I --> C C -->|否| J[结束]

嵌套循环的类型[编辑 | 编辑源代码]

C++支持任意类型的循环嵌套,常见组合包括:

  • `for`嵌套`for`:适用于已知迭代次数的场景。
  • `while`嵌套`for`:外层条件动态,内层次数固定。
  • `do-while`嵌套`while`:至少执行一次内层循环。

示例:`while`嵌套`for`[编辑 | 编辑源代码]

  
int i = 1;  
while (i <= 2) {  
    for (int j = 1; j <= 3; j++) {  
        cout << i * j << " ";  
    }  
    i++;  
    cout << endl;  
}

输出:

  
1 2 3  
2 4 6  

实际应用案例[编辑 | 编辑源代码]

案例1:打印乘法表[编辑 | 编辑源代码]

  
for (int i = 1; i <= 9; i++) {  
    for (int j = 1; j <= i; j++) {  
        cout << j << "×" << i << "=" << i * j << "\t";  
    }  
    cout << endl;  
}

输出:

  
1×1=1  
1×2=2    2×2=4  
1×3=3    2×3=6    3×3=9  
...  

案例2:二维数组遍历[编辑 | 编辑源代码]

  
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};  
for (int row = 0; row < 2; row++) {  
    for (int col = 0; col < 3; col++) {  
        cout << matrix[row][col] << " ";  
    }  
    cout << endl;  
}

输出:

  
1 2 3  
4 5 6  

性能优化与注意事项[编辑 | 编辑源代码]

1. 减少内层循环的计算量:将不依赖内层循环的表达式提到外层。

  * 低效写法:  
  
     for (int i = 0; i < 1000; i++) {  
         for (int j = 0; j < sqrt(i); j++) { /* ... */ }  
     }
  * 优化后:  
  
     for (int i = 0; i < 1000; i++) {  
         int limit = sqrt(i);  
         for (int j = 0; j < limit; j++) { /* ... */ }  
     }

2. 避免深层嵌套:超过3层的嵌套会降低可读性,建议拆分为函数。

3. 循环变量命名:使用`row/col`或`i/j/k`等明确意义的名称。

数学应用:矩阵乘法[编辑 | 编辑源代码]

嵌套循环可实现矩阵乘法C=A×B,其中: Cij=k=1nAik×Bkj

  
// 假设A是m×n矩阵,B是n×p矩阵  
for (int i = 0; i < m; i++) {  
    for (int j = 0; j < p; j++) {  
        C[i][j] = 0;  
        for (int k = 0; k < n; k++) {  
            C[i][j] += A[i][k] * B[k][j];  
        }  
    }  
}

常见问题解答[编辑 | 编辑源代码]

Q: 如何提前退出嵌套循环? A: 使用`break`语句配合标签或标志变量:

  
bool exitFlag = false;  
for (int i = 0; i < 10 && !exitFlag; i++) {  
    for (int j = 0; j < 10; j++) {  
        if (i * j == 42) {  
            exitFlag = true;  
            break;  
        }  
    }  
}

Q: 嵌套循环的时间复杂度是多少? A: 若外层循环执行m次,内层执行n次,则总复杂度为O(m×n)

总结[编辑 | 编辑源代码]

嵌套循环是处理多维数据和多层次逻辑的核心工具。通过合理设计和优化,可以高效解决复杂问题。建议初学者从简单案例入手,逐步掌握其灵活性和应用场景。