Advertisement
Guest User

Untitled

a guest
Nov 12th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. template<typename T>
  2. class MyIter : public std::iterator<std::random_access_iterator_tag, T>{
  3. public:
  4.     typedef MyIter<T>  iterator;
  5.     typedef T* pointer;
  6.  
  7.     MyIter(pointer ptr = nullptr):m_data(ptr){}
  8.  
  9.     T& operator*(){return *m_data;}
  10.  
  11.     iterator& operator++(){++m_data; return *this;}
  12.  
  13.     iterator operator++(int){
  14.         iterator tmp = m_data;
  15.         ++m_data;
  16.         return tmp;
  17.     }
  18.  
  19.     iterator& operator--(){--m_data; return *this;}
  20.  
  21.     iterator operator--(int){
  22.         iterator tmp = m_data;
  23.         --m_data;
  24.         return tmp;
  25.     }
  26.  
  27.     bool operator<(const MyIter& rhs){return m_data<rhs.m_data;}
  28.  
  29.     MyIter<T> operator-(const MyIter<T>& rhs){
  30.         MyIter<T> tmp = *this;
  31.         tmp.m_data-=rhs.m_data;
  32.         return tmp;
  33.     }
  34.  
  35.     MyIter<T> operator+(const MyIter<T>& rhs){
  36.         MyIter<T> tmp = *this;
  37.         tmp.m_data+=rhs.m_data;
  38.         return tmp;
  39.     }
  40.  
  41.     MyIter<T> operator+=(const MyIter<T>& movement)
  42.     {
  43.         m_data += movement.m_data;
  44.  
  45.         return *this;
  46.     }
  47.  
  48.     MyIter<T>& operator-=(const MyIter<T>& movement)
  49.     {
  50.         m_data -= movement.m_data;
  51.  
  52.         return *this;
  53.     }
  54.     std::ptrdiff_t operator-(MyIter<T> const& rhs) const{
  55.         auto old = m_data;
  56.         m_data -= rhs.m_data;
  57.         auto temp = *this;
  58.         m_data = old;
  59.         return temp.m_data;
  60.     }
  61.  
  62.     MyIter& operator=(const MyIter<T>& rhs){
  63.         this->m_data = rhs.m_data;
  64.         return *this;
  65.     }    
  66.  
  67.  
  68.     bool operator==(const MyIter& rhs) const{return m_data==rhs.m_data;}
  69.     bool operator!=(const MyIter& rhs) const{return !((*this)==rhs);}
  70.  
  71.     pointer m_data;
  72. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement