2014-11-03 60 views
0

所以即時嘗試重載*運算符使其乘以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; 
} 
+1

只是一個側面說明 - 考慮重載'operator * ='來代替,並根據'operator * ='實現'operator *'。 – PaulMcKenzie 2014-11-03 01:53:22

+2

將邏輯放入'* ='運算符並用'*'運算符調用它是很典型的。這是因爲'* ='可以在現有矩陣上就地工作,而'*'產生副本,因此效率較低。我也建議你通過const引用來取m,以避免複製它。 – 2014-11-03 01:53:48

+2

'mRow = getRow(j); mCol = m.getCol(j);'這每次都複製整個向量。那真的是你想要做的嗎?爲什麼不把它存儲在一個引用或指針中。 – 2014-11-03 01:54:21

回答

2
for(int j = 0; j<row-1; i++){ 
// ^ ^ ^

哎呦。

+0

這就是爲什麼我總是使用'​​k'而不是'j'。 – Radiodef 2014-11-03 01:49:38

+1

大聲笑哎呀。 – a22asin 2014-11-03 01:51:31

+0

'j ryanpattison 2014-11-03 01:52:04