嵌套for循环如何工作?

时间:2013-12-22 07:06:10

标签: c++ for-loop nested-loops

我需要帮助了解如何在 C ++ 中嵌套for循环以及如何理解正在发生的事情?

有人可以向我解释这些代码行是怎么回事:

#include <iostream>
using namespace std;
int main() {
    const int MAX_ROWS = 3;
    const int MAX_COLS = 4;

    // 2D array of integers
    int MyInts[MAX_ROWS][MAX_COLS] = {{34, -1, 879, 22},
                                      {24, 365, -101, -1},
                                      {-20, 40, 90, 97}};

    // iterate rows, each array of int
    for (int Row = 0; Row < MAX_ROWS; ++Row) {
        // iterate integers in each row (columns)
        for (int Column = 0; Column < MAX_COLS; ++Column) {
            cout << "Integer[" << Row << "][" << Column << "] = " << MyInts[Row][Column] << endl;
        }
    }

    return 0;
}

我如何教自己循环三重嵌套正在做什么?

4 个答案:

答案 0 :(得分:2)

  

在什么情况下你需要它

通常在

时需要嵌套的for循环

您有两个(或更多)维度可供使用

   for e.g :  working with images, x and y dimensions

              working with matrix
  

您的代码说明:

首先选择要使用的行,

然后在所选行中,遍历所有列

然后你移动第二行

当第一行的所有列都已处理/读取时,外部循环负责移动到第二行

内部for循环遍历外循环选择的行中的列

  背后的逻辑:

外部循环等待内部循环完成,然后继续进行下一次迭代。

即。对于外循环的每次迭代,内循环将覆盖其整个迭代。

就像你的情况一样,对于你的外循环的每次迭代 内循环运行4次(每行中的列数)

并且所有行都会发生此过程,即三次(行数)

答案 1 :(得分:1)

通过2D数组的嵌套循环意味着遍历每个元素属于一列,并为每一行重复。

说明:

enter image description here

答案 2 :(得分:0)

在这种情况下,它会迭代一个2d数组,它会让你产生一个由行和列组成的实际表的错觉。所以首先它从索引为0的第一行开始,然后转到第二行for循环(列)并循环它直到它达到最大列并返回到第一个for循环并转到下一行(索引) )等等直到达到最大行然后停止。希望这有点帮助

答案 3 :(得分:0)

任何关于C ++的书都将有一章关于循环。

当你&#34; nest&#34; 两个循环时,外循环控制内循环的完整重复次数。虽然可以嵌套所有类型的循环,但最常见的嵌套循环是for循环。

当您处理 2-d数组时,即由行和列组成时,可以使用嵌套的for循环。

示例:您有三行四列的二维数组,您需要做的是单独访问数组中的每个元素每行一个元素。

在代码中,你有两个循环,第一个循环遍历行,第二个循环正在做的是迭代遍历列。

这里,外循环中的变量 Row 被初始化为零

Row = 0,这是你的第0行,然后循环进入内循环,循环从Column=0运行,直到达到条件Column < MAX_COLS -

Column = 0;cout即打印Integer[0][0]=34

然后,Column递增(++Column)并检查它是否小于MAX_COLSColumn < MAX_COLS;) 如果是,那么它会打印Integer[ 它所在的行号 ][ 它所在的列号 ]该地点的=

这将在MAX_COLS之前完成,从而显示 4 列。然后循环再次移动到外部循环,增量行(++Row)检查该值是否小于MAX_ROWS;并且过程继续直到MAX_ROWS = 3。然后停止。

尝试使用不同的行和列值的相同示例,并在调试中运行程序。你会明白究竟发生了什么。

你得到的输出是:

Integer[0][0] = 34
Integer[0][1] = -1
Integer[0][2] = 879
Integer[0][3] = 22
Integer[1][0] = 24
Integer[1][1] = 365
Integer[1][2] = -101
Integer[1][3] = -1
Integer[2][0] = -20
Integer[2][1] = 40    
Integer[2][2] = 90
Integer[2][3] = 97

我真的希望你能从中获得一些东西。