#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;//注意释放堆空间
}