Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. template <typename T>
  5. class Matrix {
  6. private:
  7. std::vector<std::vector<T> > data;
  8.  
  9. public:
  10. Matrix(const std::vector<std::vector<T> >& d)
  11. : data(d) {
  12. }
  13.  
  14. const T& operator() (std::size_t i, std::size_t j) const {
  15. return data[i][j];
  16. }
  17.  
  18. const std::pair<std::size_t, std::size_t> size() const {
  19. return std::pair<std::size_t, std::size_t> (data.size(), data[0].size());
  20. }
  21.  
  22. Matrix& operator += (const Matrix& other) {
  23. for (std::size_t i = 0; i != other.size().first; ++i)
  24. for (std::size_t j = 0; j != other.size().second; ++j)
  25. data[i][j] += other.data[i][j];
  26. return *this;
  27. }
  28.  
  29. Matrix operator + (const Matrix& other) const {
  30. auto C = *this;
  31. C += other;
  32. return C;
  33. }
  34.  
  35. template <typename M>
  36. Matrix& operator *=(const M& number) {
  37. size_t s = data.size(), v = data[0].size();
  38. for (std::size_t i = 0; i <= s - 1; ++i) {
  39. for (std::size_t j = 0; j <= v - 1; ++j) {
  40. data[i][j] = data[i][j] * number;
  41. }
  42. }
  43. return *this;
  44. }
  45.  
  46. template <typename M>
  47. Matrix operator * (const M& number) const {
  48. auto C = *this;
  49. C *= number;
  50. return C;
  51. }
  52. };
  53.  
  54.  
  55. template <typename T>
  56. std::ostream& operator<<(std::ostream& out, const Matrix<T>& m) {
  57. std::size_t s = m.size().first, v = m.size().second;
  58. for (std::size_t i = 0; i < s ; ++i) {
  59. for (std::size_t j = 0; j < v; ++j) {
  60. out << m(i, j);
  61. if (j < (v - 1)) {
  62. out << "\t";
  63. }
  64. }
  65. if (i != (s - 1)) {
  66. out << "\n";
  67. }
  68. }
  69. return out;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement