#include<iostream> #include<vector> #include<memory> class MatrixMultiply//实现矩阵乘法类 { private: int n, m, p;//n为A矩阵的行数,m为A矩阵的列数,也就是B矩阵的行数,m为B矩阵的列数 std::vector<std::vector<int>> matrixA;//利用动态数组vector构造二维数组存储矩阵 std::vector<std::vector<int>> matrixB; std::vector<std::vector<int>> result;//用来存储乘法之后的结果矩阵 public: MatrixMultiply(const std::vector<std::vector<int>>& matrix1, const std::vector<std::vector<int>>& matrix2) :matrixA(matrix1), matrixB(matrix2) { n = matrixA.size(); m = matrixA[0].size(); p = matrixB[0].size(); result = std::vector<std::vector<int>>(n, std::vector<int>(p, 0));//将结果矩阵初始化,并且将初值赋为0 } void Multiply() { for(int i=0;i<n;i++){ for(int j=0;j<p;j++) { for(int k=0;k<m;k++) { result[i][j] += matrixA[i][k] * matrixB[k][j];//按矩阵运算规则计算 } } } } void Print() { for(int i=0;i<n;i++) { for(int j=0;j<p;j++) { std::cout << result[i][j] << " "; } std::cout << std::endl; } } }; int main() { std::vector<std::vector<int>> matrix1(2, std::vector<int>(3)); std::vector<std::vector<int>> matrix2(3, std::vector<int>(2)); int n1 = matrix1.size(), m1 = matrix1[0].size(); int n2 = matrix2.size(), m2 = matrix2[0].size(); for(int i=0;i<n1;i++) { for(int j=0;j<m1;j++) { std::cin >> matrix1[i][j]; } } for(int i=0;i<n2;i++) { for(int j=0;j<m2;j++) { std::cin >> matrix2[i][j]; } } //std::unique_ptr<MatrixMultiply> matrix = std::make_unique<MatrixMultiply>(matrix1, matrix2); MatrixMultiply* matrix = new MatrixMultiply(matrix1, matrix2);//在堆上分配内存,因为构造的对象占用内存较大 matrix->Multiply(); matrix->Print(); delete matrix;//注意释放堆空间 }