Advertisement
Guest User

Untitled

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