Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
matrix.h@0:1adddb4d1d6a, 2021-04-13 (annotated)
- Committer:
- minamikawa
- Date:
- Tue Apr 13 08:55:34 2021 +0000
- Revision:
- 0:1adddb4d1d6a
Unchecked
Who changed what in which revision?
| User | Revision | Line number | New 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 |