在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()
函數對其進行轉置。最后,我們打印出原始矩陣和轉置后的矩陣。