Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.19 KB | None | 0 0
  1. #include <iostream>
  2. #include <iterator>
  3. #include <vector>
  4.  
  5. // template <typename T, int N>
  6. // class Vector;
  7.  
  8. template <typename T, int N>
  9. class ScalarIterator;
  10.  
  11. template <typename T, int N>
  12. class Sequence
  13. {
  14. private:
  15.     vector<vector<T> > seq;
  16.     vector<T> scal;
  17.     friend class ScalarIterator<T, N>;
  18. public:
  19.     Sequence()
  20.     {
  21.         seq = new vector();
  22.         scal = new vector();
  23.     }
  24.  
  25.     void set_back(vector<T> x)
  26.     {
  27.         if (n.size() != N) throw "incorrect dimencity";
  28.         if (seq.empty() || seq.size() == 1)
  29.         {
  30.             seq.emplace_back(x);
  31.             return;
  32.         }
  33.         else
  34.         {
  35.             seq.emplace_back(x);
  36.             T s = 0;
  37.             for (int i = 0; i < N; i++)
  38.                 s += x[i] * (seq[seq.size()-1])[i];
  39.             scal.emplace_back(s);
  40.         }
  41.     }
  42.  
  43.     ScalarIterator<T, N> begin();
  44.     ScalarIterator<T, N> end();
  45.  
  46.     Vector operator[] (int n) {
  47.         return seq[n];
  48.     }
  49.  
  50.     friend ostream& operator<< (ostream& os, Sequence<T, N>& n)
  51.     {
  52.         for (auto i : n.seq)
  53.             os << i << "\n";
  54.         return os;
  55.     }
  56. };
  57.  
  58. // template<typename T, int N>
  59. // class Vector
  60. // {
  61. // private:
  62. //     vector<T> v;
  63. // public:
  64. //     Vector(Sequence<T, N> *seq, T scal): ;
  65. //     T operator* (const Vector obj)
  66. //     {
  67. //         T res = 0;
  68. //         for (int i = 0; i < N; i++){
  69. //             res += this->v[i] * obj.v[i];
  70. //         }
  71. //         return res;
  72. //     }
  73. //     bool operator== (const Vector obj)
  74. //     {
  75. //         return this->v == obj.v;
  76. //     }
  77. //     bool operator!= (const Vector obj)
  78. //     {
  79. //         return !(*this == obj);
  80. //     }
  81. //     T operator[] (int i)
  82. //     {
  83. //         return v[i];
  84. //     }
  85. //     const T operator[] (int i) const{
  86. //         return v[i];
  87. //     }
  88. //     friend ostream& operator<< (ostream& os, Vector<T, N>& v)
  89. //     {
  90. //         for (auto i : v.v)
  91. //         {
  92. //             os << i << " ";
  93. //         }
  94. //         os << "\n";
  95. //         return os;
  96. //     }
  97. // };
  98.  
  99. template <typename T, int N>
  100. class ScalarIterator:
  101.     public iterator<
  102.         bidirectional_iterator_tag,
  103.         int,
  104.         ptrdiff_t,
  105.         Vector<T, N>*,
  106.         Vector<T, N>
  107.     >
  108. {
  109. private:
  110.     Vector<T, N> *vec;
  111.     int scal;
  112.     bool is_default;
  113.  
  114.     bool is_end() const {
  115.         return scal > 0;
  116.     }
  117.  
  118. public:
  119.         ScalarIterator(): is_default(true) {}
  120.  
  121.         ScalarIterator(Vector<T, N> &obj, int scal): vec(&obj), scal(scal), is_default(false) {}
  122.  
  123.     bool operator== (const     ScalarIterator<T, N> &other) const
  124.     {
  125.         return (is_default && other.is_default) ||
  126.             (is_default && other.is_end()) ||
  127.             (is_end() && other.is_default) ||
  128.             (vec == other.vec && scal == other.scal);
  129.     }
  130.  
  131.     bool operator!= (const     ScalarIterator<T, N> &other) const
  132.     {
  133.         return !(*this == other);
  134.     }
  135.  
  136.     Vector<T, D> operator* ()
  137.     {
  138.         if (is_default) throw "not initialized iterator";
  139.         return Vector<T, N>(vec, scal);
  140.     }
  141. };
  142.  
  143. template<typename T, int N>
  144. ScalarIterator<T, N> Sequence<T, N>::begin()
  145. {
  146.     return ScalarIterator<T, N>(*this);
  147. }
  148.  
  149. template<typename T, int N>
  150. ScalarIterator<T, N> Sequence<T, N>::end()
  151. {
  152.     T scal = 0;
  153.    
  154.     return ScalarIterator<T, N>(*this);
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement