Advertisement
Filipbg

Sentence.h

Jan 27th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #ifndef SEQUENCE_H_INCLUDED
  2. #define SEQUENCE_H_INCLUDED
  3.  
  4. #include <vector>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. template<typename T>
  9. class Iterator
  10. {
  11. private:
  12.  
  13.   static const int iteratorEnd = -1;
  14.   vector<T>& elements;
  15.   int next;
  16.   Iterator(vector<T>& elements, int next) : elements(elements), next(next) { }
  17.  
  18. public:
  19.  
  20.   static Iterator begin(vector<T>& elements)
  21.   {
  22.     if(elements.size() == 0)
  23.       return end(elements);
  24.  
  25.     return Iterator(elements, 0);
  26.   }
  27.  
  28.   static Iterator end(vector<T>& elements)
  29.   {
  30.     return Iterator(elements, iteratorEnd);
  31.   }
  32.  
  33.   bool operator!=(Iterator& other)
  34.   {
  35.     return this->elements != other.elements || this->next != other.next;
  36.   }
  37.  
  38.   Iterator& operator++()
  39.   {
  40.     ++this->next;
  41.     if(this->next >= this->elements.size())
  42.       this->next = iteratorEnd;
  43.  
  44.     return *this;
  45.   }
  46.  
  47.   T& operator*()
  48.   {
  49.     return this->elements[this->next];
  50.   }
  51. };
  52.  
  53. template<typename T, typename Generator>
  54. class Sequence
  55. {
  56. private:
  57.  
  58.   Generator generator;
  59.   vector<T> elements{ };
  60. public:
  61.  
  62.   void generateNext(int counter)
  63.   {
  64.     for(int i = 0; i < counter; ++i)
  65.       this->elements.emplace_back(this->generator());
  66.   }
  67.  
  68.   Iterator<T> begin()
  69.   {
  70.     return Iterator<T>::begin(this->elements);
  71.   }
  72.  
  73.   Iterator<T> end()
  74.   {
  75.     return Iterator<T>::end(this->elements);
  76.   }
  77. };
  78.  
  79. #endif // SEQUENCE_H_INCLUDED
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement