AkashiRobo / Mbed OS matrix_lib
Committer:
minamikawa
Date:
Tue Apr 13 08:55:34 2021 +0000
Revision:
0:1adddb4d1d6a
Unchecked

Who changed what in which revision?

UserRevisionLine numberNew contents of line
minamikawa 0:1adddb4d1d6a 1 #ifndef MATRIX2_LIB
minamikawa 0:1adddb4d1d6a 2 #define MATRIX2_LIB
minamikawa 0:1adddb4d1d6a 3
minamikawa 0:1adddb4d1d6a 4 #include<vector>
minamikawa 0:1adddb4d1d6a 5
minamikawa 0:1adddb4d1d6a 6 using namespace std;
minamikawa 0:1adddb4d1d6a 7
minamikawa 0:1adddb4d1d6a 8 template <class T>
minamikawa 0:1adddb4d1d6a 9 class Matrix{
minamikawa 0:1adddb4d1d6a 10 private:
minamikawa 0:1adddb4d1d6a 11 vector<vector<T>> matrix;
minamikawa 0:1adddb4d1d6a 12 int row;
minamikawa 0:1adddb4d1d6a 13 int col;
minamikawa 0:1adddb4d1d6a 14 public:
minamikawa 0:1adddb4d1d6a 15 Matrix(int n, int m, T initNum):row(n), col(m), matrix(vector<vector<T>>(n, vector<T>(m))){
minamikawa 0:1adddb4d1d6a 16 for(int i=0;i<row;i++){
minamikawa 0:1adddb4d1d6a 17 for(int j=0;j<col;j++){
minamikawa 0:1adddb4d1d6a 18 matrix[i][j] = initNum;
minamikawa 0:1adddb4d1d6a 19 }
minamikawa 0:1adddb4d1d6a 20 }
minamikawa 0:1adddb4d1d6a 21 }
minamikawa 0:1adddb4d1d6a 22 Matrix(int n, int m):row(n), col(m), matrix(vector<vector<T>>(n, vector<T>(m))){}
minamikawa 0:1adddb4d1d6a 23
minamikawa 0:1adddb4d1d6a 24 ~Matrix(){}
minamikawa 0:1adddb4d1d6a 25
minamikawa 0:1adddb4d1d6a 26 void show(){
minamikawa 0:1adddb4d1d6a 27 for(int i=0;i<row;i++){
minamikawa 0:1adddb4d1d6a 28 for(int j=0;j<col;j++){
minamikawa 0:1adddb4d1d6a 29 }
minamikawa 0:1adddb4d1d6a 30 }
minamikawa 0:1adddb4d1d6a 31 }
minamikawa 0:1adddb4d1d6a 32
minamikawa 0:1adddb4d1d6a 33 vector<T> operator[](const int i) const{return matrix[i];}
minamikawa 0:1adddb4d1d6a 34 vector<T>& operator[](const int i){return matrix[i];}
minamikawa 0:1adddb4d1d6a 35
minamikawa 0:1adddb4d1d6a 36 Matrix& operator=(const Matrix& a){
minamikawa 0:1adddb4d1d6a 37 if((row == a.row) && (col == a.col)){
minamikawa 0:1adddb4d1d6a 38 row = a.row;
minamikawa 0:1adddb4d1d6a 39 col = a.col;
minamikawa 0:1adddb4d1d6a 40 for(int i=0;i<row;i++){
minamikawa 0:1adddb4d1d6a 41 for(int j=0;j<col;j++){
minamikawa 0:1adddb4d1d6a 42 matrix[i][j] = a[i][j];
minamikawa 0:1adddb4d1d6a 43 }
minamikawa 0:1adddb4d1d6a 44 }
minamikawa 0:1adddb4d1d6a 45 }else{
minamikawa 0:1adddb4d1d6a 46
minamikawa 0:1adddb4d1d6a 47 }
minamikawa 0:1adddb4d1d6a 48 return *this;
minamikawa 0:1adddb4d1d6a 49 }
minamikawa 0:1adddb4d1d6a 50
minamikawa 0:1adddb4d1d6a 51 Matrix& operator+=(const Matrix& a){
minamikawa 0:1adddb4d1d6a 52 for(int i=0;i<row;i++){
minamikawa 0:1adddb4d1d6a 53 for(int j=0;j<col;j++){
minamikawa 0:1adddb4d1d6a 54 matrix[i][j] += a[i][j];
minamikawa 0:1adddb4d1d6a 55 }
minamikawa 0:1adddb4d1d6a 56 }
minamikawa 0:1adddb4d1d6a 57 return *this;
minamikawa 0:1adddb4d1d6a 58 }
minamikawa 0:1adddb4d1d6a 59
minamikawa 0:1adddb4d1d6a 60 Matrix operator+(const Matrix& a) const {
minamikawa 0:1adddb4d1d6a 61 return Matrix(*this) += a;
minamikawa 0:1adddb4d1d6a 62 }
minamikawa 0:1adddb4d1d6a 63
minamikawa 0:1adddb4d1d6a 64 Matrix& operator-=(const Matrix& a){
minamikawa 0:1adddb4d1d6a 65 for(int i=0;i<row;i++){
minamikawa 0:1adddb4d1d6a 66 for(int j=0;j<col;j++){
minamikawa 0:1adddb4d1d6a 67 matrix[i][j] -= a[i][j];
minamikawa 0:1adddb4d1d6a 68 }
minamikawa 0:1adddb4d1d6a 69 }
minamikawa 0:1adddb4d1d6a 70 return *this;
minamikawa 0:1adddb4d1d6a 71 }
minamikawa 0:1adddb4d1d6a 72
minamikawa 0:1adddb4d1d6a 73 Matrix operator-(const Matrix& a) const {
minamikawa 0:1adddb4d1d6a 74 return Matrix(*this) -= a;
minamikawa 0:1adddb4d1d6a 75 }
minamikawa 0:1adddb4d1d6a 76
minamikawa 0:1adddb4d1d6a 77 Matrix& operator*=(const Matrix& a){
minamikawa 0:1adddb4d1d6a 78 Matrix<T> tmp(row, a.col);
minamikawa 0:1adddb4d1d6a 79 for(int i=0;i<row;i++){
minamikawa 0:1adddb4d1d6a 80 for(int j=0;j<a.col;j++){
minamikawa 0:1adddb4d1d6a 81 for(int k=0;k<col;k++){
minamikawa 0:1adddb4d1d6a 82 tmp[i][j] += matrix[i][k] * a[k][j];
minamikawa 0:1adddb4d1d6a 83 }
minamikawa 0:1adddb4d1d6a 84 }
minamikawa 0:1adddb4d1d6a 85 }
minamikawa 0:1adddb4d1d6a 86 col = a.col;
minamikawa 0:1adddb4d1d6a 87 for(int i=0;i<row;i++){
minamikawa 0:1adddb4d1d6a 88 matrix[i].resize(col);
minamikawa 0:1adddb4d1d6a 89 }
minamikawa 0:1adddb4d1d6a 90 for(int i=0;i<row;i++){
minamikawa 0:1adddb4d1d6a 91 for(int j=0;j<col;j++){
minamikawa 0:1adddb4d1d6a 92 matrix[i][j] = tmp[i][j];
minamikawa 0:1adddb4d1d6a 93 }
minamikawa 0:1adddb4d1d6a 94 }
minamikawa 0:1adddb4d1d6a 95
minamikawa 0:1adddb4d1d6a 96 return *this;
minamikawa 0:1adddb4d1d6a 97 }
minamikawa 0:1adddb4d1d6a 98
minamikawa 0:1adddb4d1d6a 99 Matrix operator*(const Matrix& a) const {
minamikawa 0:1adddb4d1d6a 100 return Matrix(*this) *= a;
minamikawa 0:1adddb4d1d6a 101 }
minamikawa 0:1adddb4d1d6a 102 };
minamikawa 0:1adddb4d1d6a 103
minamikawa 0:1adddb4d1d6a 104
minamikawa 0:1adddb4d1d6a 105 #endif