Advertisement
Guest User

Untitled

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