C++ 尝试重载矩阵的*运算符
因此,我试图重载*运算符,使其与存储在int向量的向量中的2个矩阵相乘。然而,当我输入原始矩阵时,我的代码似乎总是给我错误的输出: 当我执行{0,1,0},{0,2,0},{0,3,0}*{0,2,0},{0,2,0},{0,2,0}时,程序会给出:C++ 尝试重载矩阵的*运算符,c++,overloading,C++,Overloading,因此,我试图重载*运算符,使其与存储在int向量的向量中的2个矩阵相乘。然而,当我输入原始矩阵时,我的代码似乎总是给我错误的输出: 当我执行{0,1,0},{0,2,0},{0,3,0}*{0,2,0},{0,2,0},{0,2,0}时,程序会给出: 0 0 0 0 4 4 0 0 0 0 4 4 0 4 0 0 4 2 0 0 0 而不是 0 2 0 0 4 0 0 6 0 接线员* Matrix Matrix::op
0
0
0
0
4
4
0
0
0
0
4
4
0 4 0
0 4 2
0 0 0
而不是
0 2 0
0 4 0
0 6 0
接线员*
Matrix Matrix::operator*(Matrix m){
vector<int> mRow;
vector<int> mCol;
vector<int> newRow;
Matrix newM(row, column);
for(int i =0; i<row-1; j++){
for(int j = 0; j<row-1; i++){
mRow = getRow(j);
mCol = m.getCol(j);
int r = 0;
int c = 0;
int product = 0;
do{
product+=mRow[r]*mCol[c];
++r;
++c;
cout << product << endl;
}while(r < row && c < column);
newRow.push_back(product);
}
newM.setRow(newRow,i);
newRow.clear();
}
return newM;
}
矩阵::运算符*(矩阵m){
矢量mRow;
向量mCol;
向量纽罗;
矩阵newM(行、列);
这就是为什么我总是用k
而不是j
j
似乎也很可疑,也许j|
@a22asin:注意我花了45秒才发现的原因。:(事实上,我没有吹嘘)@lightnessraceinorbit“比赛”确实,只是一个旁注-考虑重载<代码>操作符*= <代码> >,并按照<代码>操作符*> <代码>实现<代码>运算符*/COD>。典型的是将逻辑放在<代码> *> <代码>操作符中,并有<代码> */Cuth>操作员调用它。这是因为<代码> *= <代码>可以在现有矩阵上工作,而<代码> */代码>会产生副本,因此效率较低。我还建议您通过常量引用获取m以避免复制它。mRow=getRow(j);mCol=m.getCol(j);
这是每次复制整个向量。这真的是您想要做的吗?为什么不将其存储在引用或指针中。
for(int j = 0; j<row-1; i++){
// ^ ^ ^