Advertisement
Guest User

Untitled

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