Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef SEQUENCE_H_INCLUDED
- #define SEQUENCE_H_INCLUDED
- #include <vector>
- #include <iostream>
- using namespace std;
- template<typename T>
- class Iterator
- {
- private:
- static const int iteratorEnd = -1;
- vector<T>& elements;
- int next;
- Iterator(vector<T>& elements, int next) : elements(elements), next(next) { }
- public:
- static Iterator begin(vector<T>& elements)
- {
- if(elements.size() == 0)
- return end(elements);
- return Iterator(elements, 0);
- }
- static Iterator end(vector<T>& elements)
- {
- return Iterator(elements, iteratorEnd);
- }
- bool operator!=(Iterator& other)
- {
- return this->elements != other.elements || this->next != other.next;
- }
- Iterator& operator++()
- {
- ++this->next;
- if(this->next >= this->elements.size())
- this->next = iteratorEnd;
- return *this;
- }
- T& operator*()
- {
- return this->elements[this->next];
- }
- };
- template<typename T, typename Generator>
- class Sequence
- {
- private:
- Generator generator;
- vector<T> elements{ };
- public:
- void generateNext(int counter)
- {
- for(int i = 0; i < counter; ++i)
- this->elements.emplace_back(this->generator());
- }
- Iterator<T> begin()
- {
- return Iterator<T>::begin(this->elements);
- }
- Iterator<T> end()
- {
- return Iterator<T>::end(this->elements);
- }
- };
- #endif // SEQUENCE_H_INCLUDED
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement