这是一个c++的关于矩阵转置与乘法的问题,怎么将这个问题的类给全部安排好?
#include <iostream>
#include <vector>
using namespace std;
class Matrix {
public:
Matrix(int m, int n) : m_(m), n_(n), data_(m * n) {}
int m() const { return m_; }
int n() const { return n_; }
double& operator()(int i, int j) { return data_[i * n_ + j]; }
Matrix operator*(const Matrix& other) const {
if (n_ != other.m_) throw "Invalid matrix size!";
Matrix result(m_, other.n_);
for (int i = 0; i < m_; ++i) {
for (int j = 0; j < other.n_; ++j) {
double sum = 0;
for (int k = 0; k < n_; ++k) {
sum += (*this)(i, k) * other(k, j);
}
result(i, j) = sum;
}
}
return result;
}
Matrix transpose() const {
Matrix result(n_, m_);
for (int i = 0; i < m_; ++i) {
for (int j = 0; j < n_; ++j) {
result(j, i) = (*this)(i, j);
}
}
return result;
}
private:
int m_, n_;
vector<double> data_;
};
int main() {
Matrix A(2, 3);
A(0, 0) = 2; A(0, 1) = 3; A(0, 2) = 4;
A(1, 0) = 5; A(1, 1) = 6; A(1, 2) = 7;
Matrix B(3, 2);
B(0, 0) = 1; B(0, 1) = 2;
B(1, 0) = 3; B(1, 1) = 4;
B(2, 0) = 5; B(2, 1) = 6;
Matrix C = A * B;
Matrix D = C.transpose();
cout << "A = " << endl;
for (int i = 0; i < A.m(); ++i) {
for (int j = 0; j < A.n(); ++j) {
cout << A(i, j) << " ";
}
cout << endl;
}
cout << "B = " << endl;
for (int i = 0; i < B.m(); ++i) {
for (int j = 0; j < B.n(); ++j) {
cout << B(i, j) << " ";
}
cout << endl;
}
cout << "C = A * B = " << endl;
for (int i = 0; i < C.m(); ++i) {
for (int j = 0; j < C.n(); ++j) {
cout << C(i, j) << " ";
}
cout << endl;
}
cout << "D = C^T = " << endl;
for (int i = 0; i < D.m(); ++i) {
for (int j = 0; j < D.n(); ++j) {
cout << D(i, j) << " ";
}
cout << endl;
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:1、自动推导,直接传入数据
2、显示指定类型(调用函数前加<数据类型>)
注意事项:自动推导的类型必须一致,不能一个整型一个非整型;模板必须确定出T的数据类型,才可以使用