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;

}

总结:

矩阵转置操作是一个常见的编程任务,在进行代码编写时,需要仔细考虑矩阵的行数和列数的变化。确保动态内存分配的大小与实际需要一致,可以避免代码错误并提高程序效率。

C++ 矩阵转置代码错误分析及修正

原文地址: https://www.cveoy.top/t/topic/ljIN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录