두 개의 행렬 mat1과 mat2가 있다고 가정합니다. 우리는 이 두 행렬을 더하고 세 번째 행렬을 형성해야 합니다. 더하기 연산자를 오버로드하여 이 작업을 수행해야 합니다.
따라서 입력이 다음과 같으면
| 5 | 8 |
| 9 | 6 |
| 7 | 9 |
| 8 | 3 |
| 4 | 7 |
| 6 | 3 |
그러면 출력은
| 13 | 11 |
| 13 | 13 |
| 13 | 12 |
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
더하기 연산자를 오버로드하면 다른 행렬 매트가 두 번째 인수로 사용됩니다.
-
하나의 빈 2D 배열 vv 정의
-
하나의 2D 배열 vv를 정의하고 여기에 현재 행렬 요소를 로드합니다.
-
initialize i :=0의 경우 i
-
j 초기화의 경우:=0, j
- vv[i, j] :=vv[i, j] + mat.a[i, j]
-
- vv를 사용하여 새 행렬 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <iostream>
#include <vector>
using namespace std;
class Matrix {
public:
Matrix() {}
Matrix(const Matrix& x) : a(x.a) {}
Matrix(const vector<vector<int>>& v) : a(v) {}
Matrix operator+(const Matrix&);
vector<vector<int>> a;
void display(){
for(int i = 0; i<a.size(); i++){
for(int j = 0; j<a[i].size(); j++){
cout << a[i][j] << " ";
}
cout << endl;
}
}
};
Matrix Matrix::operator+(const Matrix& m){
vector<vector<int>> vv = a;
for (int i=0; i<vv.size(); i++){
for (int j=0; j<vv[0].size(); j++){
vv[i][j] += m.a[i][j];
}
}
return Matrix(vv);
}
int main(){
vector<vector<int>> mat1 = {{5,8},{9,6},{7,9}};
vector<vector<int>> mat2 = {{8,3},{4,7},{6,3}};
int r = mat1.size();
int c = mat1[0].size();
Matrix m1(mat1), m2(mat2), res;
res = m1 + m2;
res.display();
}
입력
{{5,8},{9,6},{7,9}}, {{8,3},{4,7},{6,3}} 출력
13 11 13 13 13 12