Amonin

math vector

Dec 15th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. template <typename T>
  5. class MathVector {
  6. private:
  7.     vector<T> data;
  8.  
  9. public:
  10.     MathVector(size_t n) {
  11.         data.resize(n);
  12.     }
  13.  
  14.     template <typename Iter>
  15.     MathVector(Iter first, Iter last) {
  16.         while (first != last) {
  17.             data.push_back(*first);
  18.             ++first;
  19.         }
  20.     }
  21.  
  22.     size_t Dimension() const {
  23.         return data.size();
  24.     }
  25.     T& operator[] (size_t i) {
  26.         return data[i];
  27.     }
  28.     const T& operator [] (size_t i) const {
  29.         return data[i];
  30.     }
  31.  
  32. };
  33. template <typename T>
  34. ostream& operator << (ostream& out, const MathVector<T>& v) {
  35.     out << '(';
  36.     for (size_t i = 0; i != v.Dimension(); ++i) {
  37.         if (i > 0)
  38.             out << ", ";
  39.         out << v[i];
  40.     }
  41.     out << ')';
  42.     return out;
  43. }
  44. template <typename T>
  45. MathVector<T>& operator *= (MathVector<T>& v, const T& scalar) {
  46.     for (size_t i = 0; i != v.Dimension(); ++i)
  47.         v[i] *= scalar;
  48.     return v;
  49. }
  50. template <typename T>
  51. MathVector<T> operator * (const MathVector<T>& v, const T& scalar) {
  52.     MathVector<T> tmp = v;
  53.     tmp *= scalar;
  54.     return tmp;
  55. }
  56. template <typename T>
  57. MathVector<T>& operator += (MathVector<T>& self, const MathVector<T>& other) {
  58.     for (size_t i = 0; i != self.Dimension(); ++i)
  59.         self[i] += other[i];
  60.     return self;
  61. }
  62. template <typename T>
  63. MathVector<T> operator + (const MathVector<T>& self, const MathVector<T>& other) {
  64.     MathVector<T> tmp = self;
  65.     tmp += other;
  66.     return tmp;
  67. }
  68. template <typename T>
  69. MathVector<T> operator * (const T& scalar, const MathVector<T>& v) {
  70.     MathVector<T> tmp = v * scalar;
  71.     return tmp;
  72. }
  73. template <typename T>
  74. MathVector<T>& operator -= (MathVector<T>& self, const MathVector<T>& other) {
  75.     for (size_t i = 0; i != self.Dimension(); ++i)
  76.         self[i] -= other[i];
  77.     return self;
  78. }
  79. template <typename T>
  80. MathVector<T> operator - (const MathVector<T>& self, const MathVector<T>& other) {
  81.     MathVector<T> tmp = self;
  82.     tmp -= other;
  83.     return tmp;
  84. }
  85. template <typename T>
  86. MathVector<T> operator - (const MathVector<T>& self) {
  87.     MathVector<T> tmp = self;
  88.     tmp *= -1;
  89.     return tmp;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment