Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.98 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. template <typename value_type>
  4. class LinkedList
  5. {
  6.     friend class iterator;
  7. private:
  8.     m_element * m_head;
  9.     struct m_element
  10.     {
  11.         value_type m_data;
  12.         m_element * next;
  13.         m_element * prev;
  14.     };
  15.  
  16. public:
  17.     class iterator
  18.     {
  19.         private:
  20.         LinkedList * m_current_list;
  21.         m_element * m_current_item;
  22.         public:
  23.             iterator()
  24.             {
  25.                 m_current_list = NULL;
  26.                 m_current_item = NULL;
  27.             };
  28.             iterator(const iterator & other)
  29.             {
  30.                 m_current_item = other.m_current_item;
  31.                 m_current_list = other.m_current_list;
  32.             };
  33.            
  34.             iterator & operator=(const iterator & other)
  35.             {
  36.                 m_current_item = other.m_current_item;
  37.                 m_current_list = other.m_current_list;
  38.                 return *this;
  39.             };
  40.             bool operator!=(const iterator & other) const
  41.             {
  42.                 return (m_current_item != other.m_current_item);
  43.             };
  44.             bool operator==(const iterator & other) const
  45.             {
  46.                 return (m_current_item == other.m_current_item);
  47.             };
  48.             //Возвращает ссылку на текущий элемент коллекции.
  49.             value_type & operator*() const
  50.             {
  51.                 return (*m_current_item);
  52.             };
  53.             //Возвращает указатель на текущий элемент коллекции.
  54.             value_type * operator->() const
  55.             {
  56.                 return m_current_item;
  57.             };
  58.            
  59.             iterator & operator++()
  60.             {
  61.                 if (m_current_item)
  62.                 {
  63.                     m_current_item = m_current_item->next;
  64.                 }
  65.                 else
  66.                 {
  67.                     m_current_item = m_current_list->m_head;
  68.                 }
  69.                 return (*this);
  70.             };
  71.            
  72.             iterator operator++(int)
  73.             {
  74.                 iterator for_return(*this);
  75.                 if (m_current_item)
  76.                 {
  77.                     m_current_item = m_current_item->next;
  78.                 }
  79.                 else
  80.                 {
  81.                     m_current_item = m_current_list->m_head;
  82.                 }
  83.                 return (for_return);
  84.             };
  85.            
  86.             iterator & operator--()
  87.             {
  88.                 if (m_current_item)
  89.                 {
  90.                     m_current_item = m_current_item->prev;
  91.                 }
  92.                 else
  93.                 {
  94.                     m_current_item = m_current_list->m_head->prev;
  95.                 }
  96.                 return (*this);
  97.             };
  98.            
  99.             iterator operator--(int)
  100.             {
  101.                 iterator for_return(*this);
  102.                 if (m_current_item)
  103.                 {
  104.                     m_current_item = m_current_item->prev;
  105.                 }
  106.                 else
  107.                 {
  108.                     m_current_item = m_current_list->m_head->prev;
  109.                 }
  110.                 return (for_return);
  111.             };
  112.     };
  113.     LinkedList();
  114.     LinkedList(const LinkedList & other);
  115.     ~LinkedList();
  116.  
  117.     //Возвращает ссылку на первый элемент списка.
  118.     value_type & front()
  119.     {
  120.     };
  121.     const value_type & front() const;
  122.     //Возвращает ссылку на последний элемент списка.
  123.     value_type & back();
  124.     const value_type & back() const;
  125.  
  126.     //Возвращает итератор, указывающий на первый элемент списка.
  127.     iterator begin();
  128.     //Возвращает итератор, указывающий на элемент списка, следующий за последним
  129.     //т.е. отсутствующий в списке.
  130.     iterator end();
  131.  
  132.     //Возвращает истину, если значение value содержится в списке.
  133.     bool contains(const value_type & value) const;
  134.     //Возвращает количество вхождений значения value в список.
  135.     int count(const value_type & value) const;
  136.     //Возвращает размер списка.
  137.     int size() const;
  138.     //Возвращает истину, если список пуст.
  139.     bool empty() const;
  140.  
  141.     //Удаляет элемент, на который указывает итератор pos.
  142.     iterator erase(iterator pos);
  143.     //Удаляет элементы в интервале [begin, end).
  144.     iterator erase(iterator begin, iterator end);
  145.  
  146.     //Очищает список.
  147.     void clear();
  148.     //Удаляет все вхождения value в список.
  149.     int removeAll(const value_type & value);
  150.     //Удаляет первое вхождение value в список.
  151.     bool removeOne(const value_type & value);
  152.  
  153.     //Удаляет последний элемент списка.
  154.     void pop_back();
  155.     //Удаляет первый элемент списка.
  156.     void pop_front();
  157.     //Добавляет значение value в конец списка.
  158.     void push_back(const value_type & value);
  159.     //Добавляет значение value в начало списка.
  160.     void push_front(const value_type & value);
  161.     //Вставляет значение value перед элементом, на который указывает before
  162.     iterator insert(iterator before, const value_type & value);
  163.  
  164.     bool operator!=(const LinkedList & other) const;
  165.     bool operator==(const LinkedList & other) const;
  166.  
  167.     //Присоединяет other к списку.
  168.     LinkedList operator+(const LinkedList & other) const;
  169.     LinkedList & operator+=(const LinkedList & other);
  170.     //Присоединяет value к списку.
  171.     LinkedList & operator+=(const value_type & value);
  172.  
  173.     LinkedList & operator=(const LinkedList & other);
  174. };
  175.  
  176. int main()
  177. {
  178.     return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement