그래서 * 연산자를 오버로드하여 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;
}
그냥 부수적 인 설명입니다. 대신에'operator * ='를 오버로딩하고'operator * ='에 따라'operator *'를 구현하십시오. – PaulMcKenzie
로직을'* = '연산자에 넣고'*'연산자를 호출하는 것이 일반적입니다. 왜냐하면'*'는 기존 행렬에서 그대로 작동 할 수 있기 때문이며'*'는 복사본을 생성하기 때문에 효율성이 떨어집니다. 또한 복사를 피하기 위해 const 참조로 m을 사용하는 것이 좋습니다. –
'mRow = getRow (j); mCol = m.getCol (j);'이것은 매번 전체 벡터를 복사합니다. 그게 정말로 당신이하고 싶은 일입니까? 참조 또는 포인터에 저장하지 않는 것이 좋습니다. –