2014-11-03 4 views
0

그래서 * 연산자를 오버로드하여 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::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

+2

로직을'* = '연산자에 넣고'*'연산자를 호출하는 것이 일반적입니다. 왜냐하면'*'는 기존 행렬에서 그대로 작동 할 수 있기 때문이며'*'는 복사본을 생성하기 때문에 효율성이 떨어집니다. 또한 복사를 피하기 위해 const 참조로 m을 사용하는 것이 좋습니다. –

+2

'mRow = getRow (j); mCol = m.getCol (j);'이것은 매번 전체 벡터를 복사합니다. 그게 정말로 당신이하고 싶은 일입니까? 참조 또는 포인터에 저장하지 않는 것이 좋습니다. –

답변

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

와우.

+0

그래서 나는 항상'j' 대신'k'를 사용합니다. – Radiodef

+1

정말 고맙습니다. – a22asin

+0
관련 문제