所以即時嘗試重載*運算符使其乘以2個矩陣,這些矩陣存儲在一個向量int的向量中。然而,當我輸入原始矩陣時,我的代碼似乎總是給我錯誤的輸出:嘗試超載*運算符的矩陣
當我做{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::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;
}
只是一個側面說明 - 考慮重載'operator * ='來代替,並根據'operator * ='實現'operator *'。 – PaulMcKenzie 2014-11-03 01:53:22
將邏輯放入'* ='運算符並用'*'運算符調用它是很典型的。這是因爲'* ='可以在現有矩陣上就地工作,而'*'產生副本,因此效率較低。我也建議你通過const引用來取m,以避免複製它。 – 2014-11-03 01:53:48
'mRow = getRow(j); mCol = m.getCol(j);'這每次都複製整個向量。那真的是你想要做的嗎?爲什麼不把它存儲在一個引用或指針中。 – 2014-11-03 01:54:21