Amonin

class mathvector

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