我重载了运算符*,该运算符将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/