如何在不多次访问元素的情况下迭代二维数组?
How can I iterate over a 2D array without visiting an element more than once?
我想使用二维数组就地转置方阵。但是,当我使用嵌套的 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;
}
}
谢谢。
将内部循环条件更改为在 j 等于 i 时停止:
for (int j = 0; j < i; j++)
这样你只迭代矩阵的三角形区域(由 i = j 定义的对角线一侧的值形成),并将每个值与对角线另一侧的相应值交换对角线。
我想使用二维数组就地转置方阵。但是,当我使用嵌套的 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;
}
}
谢谢。
将内部循环条件更改为在 j 等于 i 时停止:
for (int j = 0; j < i; j++)
这样你只迭代矩阵的三角形区域(由 i = j 定义的对角线一侧的值形成),并将每个值与对角线另一侧的相应值交换对角线。