Giả sử chúng ta có hai ma trận mat1 và mat2. Chúng ta phải cộng hai ma trận này thành ma trận thứ ba bằng cách nạp chồng toán tử cộng.
Ví dụ: mat1 = [[5,8],[9,6],[7,9]], mat2 = [[8,3],[4,7],[6,3]]. Kết quả: [[13,11],[13,13],[13,12]]
Giải thuật
- Nạp chồng operator+ nhận tham chiếu const Matrix&
- Tạo bản sao ma trận hiện tại vào vv
- Duyệt qua các phần tử: vv[i][j] += mat.a[i][j]
- Trả về Matrix mới từ vv
Ví dụ minh họa
#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}};
Matrix m1(mat1), m2(mat2), res;
res = m1 + m2;
res.display();
}
Đầu vào
{{5,8},{9,6},{7,9}}, {{8,3},{4,7},{6,3}}
Đầu ra
13 11 13 13 13 12