C++ 矩阵相乘法给出了用零填充的附加列

C++ 矩阵相乘法给出了用零填充的附加列,c++,matrix,C++,Matrix,我写了一个矩阵相乘的方法。它可以正常工作,但会提供额外的零列。相乘的结果是正确的。以下是方法代码: Matrix Matrix::multiplyMatrix(Matrix second) { vector<vector<double> > sum(vec.size(), vector<double> (vec[0].size())); if (vec[0].size()!=second.vec.size()) {

我写了一个矩阵相乘的方法。它可以正常工作,但会提供额外的零列。相乘的结果是正确的。以下是方法代码:

Matrix Matrix::multiplyMatrix(Matrix second)
{

        vector<vector<double> > sum(vec.size(), vector<double> (vec[0].size()));

    if (vec[0].size()!=second.vec.size())
    {
        throw "Dimensions are not correct";
    }
    else 
    {
    for (int i=0; i<vec.size(); i++)
    {
        for (int j=0; j<second.vec[0].size(); j++)
        {
        sum[i][j]=0;
        for (int k=0; k<vec[0].size(); k++)
        {
            sum[i][j]+=vec[i][k]*second.vec[k][j];
        }
    }
    }

    Matrix out(vec.size(), vec[0].size());
    out.vec=sum;
    return out;
    }
}
矩阵:

A:

2 3 4 4
1 2 4 6
1 1 0 1

它给出的不是3x3矩阵,而是:

69 46 67 0  
71 48 67 0  
10 13 15 0
你知道有什么问题吗? 谢谢

您名为“out”的矩阵的维数错误,而且,在代码的第一行,总和的维数也错误

第一行应改为:

向量和(vec.size(),vector(second.vec[0].size()); out的定义应更改为:

矩阵输出(vec.size(),second.vec[0].size());

在第一行中,您定义了
总和的维度,您根本看不到
第二行的维度。你让结果矩阵总是和第一个操作数一样大。哦,是的,这是真的。。。但是我该怎么做呢?@frushan这段代码(您编写的)是否为(int j=0;jp)提供了线索,请提取并提供一个。
B:
1 2 3
5 6 7
9 1 5
4 5 5
69 46 67 0  
71 48 67 0  
10 13 15 0