C++ 矩阵转置代码错误分析及修正
C++ 矩阵转置代码错误分析及修正
代码示例:
int** transposeMatrix(int **a, int row, int col) {
int** result = new int*[col]; // 错误:应该为 new int*[row]
for(int i=0; i<col; i++) {
a[i] = new int[row];
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
result[i][j]=a[j][i];
}
}
return result;
}
问题分析:
上面的代码中存在一个错误,第二行代码应该为:
int** result = new int*[row];
而不是:
int** result = new int*[col];
原因:
矩阵转置操作会将原矩阵的行和列互换,因此转置后矩阵的行数应该与原矩阵的列数相同,而列数应该与原矩阵的行数相同。代码中的 result 指针数组用于存放转置后的矩阵,所以 result 的大小应该与转置后矩阵的行数相同,即 row。
修正后的代码:
int** transposeMatrix(int **a, int row, int col) {
int** result = new int*[row]; // 修正后的代码
for(int i=0; i<col; i++) {
a[i] = new int[row];
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
result[i][j]=a[j][i];
}
}
return result;
}
总结:
矩阵转置操作是一个常见的编程任务,在进行代码编写时,需要仔细考虑矩阵的行数和列数的变化。确保动态内存分配的大小与实际需要一致,可以避免代码错误并提高程序效率。
原文地址: https://www.cveoy.top/t/topic/ljIN 著作权归作者所有。请勿转载和采集!