首页 > 解决方案 > 如何修复无法正确执行 3x2 和 4x3 矩阵的转置函数?

问题描述

我的转置函数擅长转置方阵时遇到了麻烦;但是,当它是一个矩形时,它做得很糟糕。它只是在转置后不会为某些元素创建一个新列,我不确定如何解决这个问题。我试过改变循环无济于事。我正在考虑改变显示功能,但我觉得这会导致一些问题。

#include <iostream>
#include <vector>

class Matrix
{
public:
    Matrix();

    void transpose(int &numRows, int &numCols);

    void fill2dArray(int &numRows, int &numCols);

    void display2dArray(int &numRows, int &numCols) const;

private:
    static const int ROW_MAX = 10, COL_MAX = 10;
    double data[ROW_MAX][COL_MAX];
};

Matrix::Matrix()
{
    data[10][10] = {};
}

void Matrix::transpose(int &numRows, int &numCols)
{
    for (int r=0; r<numRows; ++r)
    {
        for (int c=0; c<numCols; ++c)
        {
            if (r < c)
            {
                std::swap(data[r][c],data[c][r]);
            }
        }
    }
}

void Matrix::display2dArray(int &numRows, int &numCols) const
{
    for (int r=0; r<numRows; ++r)
    {
        for (int c=0; c<numCols; ++c)
        {
            std::cout << "   " << data[r][c] << " ";
        }
        std::cout << std::endl;
    }
}

void Matrix::fill2dArray(int &numRows, int &numCols)
{
    for (int r=0; r<numRows; ++r)
    {
        std::cout << "Enter " << numCols << " values for row #" << r << std::endl;
        for (int c = 0; c < numCols; ++c)
        {
            std::cin >> data[r][c];
        }
        std::cout << std::endl;
    }
}

int main()
{
    std::cout << "You may enter up to 10 rows and 10 columns of numbers." << std::endl;

    std::cout << "\n   How many rows? ";
    int numRows;
    std::cin >> numRows;

    std::cout << "How many columns? ";
    int numCols;
    std::cin >> numCols;
    std::cout << std::endl;

    Matrix matrix;
    matrix.fill2dArray(numRows,numCols);

    std::cout << "Contents of the " << numRows << " x " << numCols << " array:" << std::endl;
    matrix.display2dArray(numRows,numCols);

    std::cout << "\nAfter transpose" << std::endl;
    matrix.transpose(numRows, numCols);
    matrix.display2dArray(numRows, numCols);
}

标签: c++arraysmatrixtranspose

解决方案


推荐阅读