我重载了运算符*,该运算符将2D数组相乘。我在进行乘法运算时遇到一些问题,在进行乘法运算时无法完全理解索引。

这里是一些声明:

int *const e;   //pointer to the memory storing all integer elements of A
const int row, column;  //r and c are the numbers of rows and columns respectively

和一些代码:
A A::operator*(const A& matrix)const
    {
        MAT result(matrix.row, matrix.column);
        if (column == matrix.row)
        {
            for (int i = 0; i < row; ++i)
            {
                for (int j = 0; j < matrix.column; j++)
                {
                    result.e[j*row + i] = 0;
                    for (int k = 0; k < column; k++)
                    {
                        result.e[j*row + i] += e[j*row + k] * matrix.e[k*row + column];
                    }
                }
            }
        }
        return result;
    }

我知道我需要3个循环,我认为我有一些问题
result.e[j*row + i] += e[j*row + k] * matrix.e[k*row + column];

你有什么线索吗?您可以给我写一些想法,因为我想了解它,所以我自己可以解决。谢谢

最佳答案

你的线

result.e[j*row + i] += e[j*row + k] * matrix.e[k*row + column];

被打破。两个矩阵A(dim M,N)和B(dim N,P)的乘积P的位置(i,j)的系数由以下定义:



因此,上述行应为:
result.e[j*row + i] += e[j*row + k] * matrix.e[k*row + i];

关于c++ - 用C++乘以2D数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27561385/

10-11 19:22