如何在C++中实现矩阵类的转置

   2024-09-30 3940
核心提示:在C++中,你可以创建一个矩阵类(Matrix),然后实现一个成员函数来转置矩阵#includeiostream#includevectorclass Matrix {publi

在C++中,你可以创建一个矩阵类(Matrix),然后实现一个成员函数来转置矩阵

#include<iostream>#include<vector>class Matrix {public:    // 构造函数    Matrix(int rows, int cols) : rows_(rows), cols_(cols), data_(rows * cols) {}    // 获取矩阵的行数    int rows() const {        return rows_;    }    // 获取矩阵的列数    int cols() const {        return cols_;    }    // 访问矩阵元素    double& operator()(int row, int col) {        return data_[row * cols_ + col];    }    // 访问矩阵元素(常量版本)    double operator()(int row, int col) const {        return data_[row * cols_ + col];    }    // 转置矩阵    Matrix transpose() const {        Matrix result(cols_, rows_);        for (int i = 0; i< rows_; ++i) {            for (int j = 0; j< cols_; ++j) {                result(j, i) = (*this)(i, j);            }        }        return result;    }private:    int rows_;    int cols_;    std::vector<double> data_;};int main() {    Matrix matrix(2, 3);    matrix(0, 0) = 1.0;    matrix(0, 1) = 2.0;    matrix(0, 2) = 3.0;    matrix(1, 0) = 4.0;    matrix(1, 1) = 5.0;    matrix(1, 2) = 6.0;    Matrix transposed = matrix.transpose();    std::cout << "原始矩阵:"<< std::endl;    for (int i = 0; i< matrix.rows(); ++i) {        for (int j = 0; j< matrix.cols(); ++j) {            std::cout<< matrix(i, j) << " ";        }        std::cout<< std::endl;    }    std::cout << "转置矩阵:"<< std::endl;    for (int i = 0; i< transposed.rows(); ++i) {        for (int j = 0; j< transposed.cols(); ++j) {            std::cout<< transposed(i, j) << " ";        }        std::cout<< std::endl;    }    return 0;}

这个示例中,我们定义了一个名为Matrix的类,它包含一个std::vector<double>类型的数据成员来存储矩阵元素。我们还实现了一些辅助函数,如rows()cols()operator(),以方便地访问矩阵的行数、列数和元素。

transpose()函数是一个成员函数,用于转置矩阵。它首先创建一个新的矩阵,其行数等于原始矩阵的列数,列数等于原始矩阵的行数。然后,它遍历原始矩阵的所有元素,并将它们复制到新矩阵的相应位置上,从而实现转置操作。

main()函数中,我们创建了一个示例矩阵,并使用transpose()函数对其进行转置。最后,我们打印出原始矩阵和转置后的矩阵。

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号