代码之家  ›  专栏  ›  技术社区  ›  GucciMane

如何在不多次访问元素的情况下迭代二维数组?

  •  2
  • GucciMane  · 技术社区  · 7 年前

    我想使用2D数组在适当的位置转置一个方阵。然而,当我使用嵌套for循环遍历数组时,元素被访问了两次,导致没有发生转置。

    我只想访问每个数组元素一次以更正此问题。

    如何更改当前代码以实现此目的?

    // transpose in-place
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int temp = a[i][j];
                a[i][j] = a[j][i];
                a[j][i] = temp;
            }
        }
    

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   samgak    7 年前

    更改内环条件,使其在j等于i时停止:

    for (int j = 0; j < i; j++)
    

    这样,您只需迭代矩阵的三角形区域(由i=j定义的对角线一侧的值形成),并将每个值与对角线另一侧的相应值交换。