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