Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.71 KB | None | 0 0
  1. template<class _DataType>
  2. class ListIterator
  3. {
  4. Node<_DataType> *m_iter = new Node<_DataType>;
  5.  
  6. public:
  7.  
  8. ListIterator(); // конструктор по умолчанию
  9. explicit ListIterator(Node<_DataType> *p_node); // конструктор
  10. ListIterator(const ListIterator<_DataType> &p_iter); // конструктор копирования
  11. ~ListIterator(); // деструктор
  12.  
  13. const ListIterator& operator=(const ListIterator<_DataType> &p_iter); // перегрузка = ???
  14. bool operator!=(const ListIterator<_DataType> &p_iter) const; // перегрузка !=
  15. bool operator==(const ListIterator<_DataType> &p_iter) const; // перегрузка ==
  16. _DataType& operator*() const; // перегрузка разыменования
  17. ListIterator& operator++(); // перегрузка префиксного инкремента
  18. ListIterator& operator--(); // перегрузка префиксного декремента
  19. ListIterator operator++(int); // перегрузка постфиксного инкремента
  20. ListIterator operator--(int); // перегрузка постфиксного декремента
  21. _DataType* operator->(); // Error
  22. ListIterator operator+(int);
  23. ListIterator<_DataType> operator-(int);
  24. void operator()(int &count);
  25.  
  26. friend ListIterator<_DataType> List<_DataType>::insert(ListIterator<_DataType> &pos, _DataType &&value);
  27. friend ListIterator<_DataType> List<_DataType>::insert(ListIterator<_DataType> pos, ListIterator<_DataType> beg, const ListIterator<_DataType> &end);
  28. friend ListIterator<_DataType> List<_DataType>::erase(ListIterator<_DataType> &pos);
  29. };
  30.  
  31. void ListIterator<std::string>::operator()(int &count)
  32. {
  33. for (int i = 0; i < (m_iter->m_data).length(); ++i)
  34. {
  35. if (std::isalpha(m_iter->m_data[i]))
  36. count++;
  37. }
  38. }
  39.  
  40. template<class _DataType>
  41. _DataType* ListIterator<_DataType>::operator->()
  42. {
  43. return &(m_iter->m_data);
  44. }
  45.  
  46. template<class _DataType>
  47. inline ListIterator<_DataType> ListIterator<_DataType>::operator+(int)
  48. {
  49. return ListIterator<_DataType>(m_iter->m_next);
  50. }
  51.  
  52. template<class _DataType>
  53. inline ListIterator<_DataType> ListIterator<_DataType>::operator-(int)
  54. {
  55. return ListIterator<_DataType>(m_iter->m_prev);
  56. }
  57.  
  58. template<class _DataType>
  59. ListIterator<_DataType>::ListIterator() // конструктор по умолчанию
  60. {
  61. m_iter = new Node<_DataType>;
  62. }
  63.  
  64. template<class _DataType>
  65. ListIterator<_DataType>::ListIterator(Node<_DataType> *p_node) : m_iter(p_node) {} // конструктор
  66.  
  67. template <class _DataType>
  68. ListIterator<_DataType>::ListIterator(const ListIterator<_DataType> &p_iter) // конструктор копирования
  69. {
  70. m_iter->m_data = p_iter.m_iter->m_data;
  71. m_iter->m_next = p_iter.m_iter->m_next;
  72. m_iter->m_prev = p_iter.m_iter->m_prev;
  73. }
  74.  
  75. template<class _DataType>
  76. ListIterator<_DataType>::~ListIterator() // деструктор
  77. {
  78. //delete m_iter;
  79. m_iter = nullptr;
  80. }
  81.  
  82. template <class _DataType>
  83. const ListIterator<_DataType>& ListIterator <_DataType>::operator=(const ListIterator<_DataType>& p_iter) // перегрузка = ???
  84. {
  85. if (this == &p_iter) return *this;
  86. m_iter->m_data = p_iter.m_iter->m_data; // ????
  87. m_iter->m_next = p_iter.m_iter->m_next;
  88. m_iter->m_prev = p_iter.m_iter->m_prev;
  89. }
  90.  
  91. template <class _DataType>
  92. bool ListIterator<_DataType>::operator!=(const ListIterator<_DataType> &p_iter) const // перегрузка !=
  93. {
  94. if (m_iter != p_iter.m_iter) return true;
  95. return false;
  96. }
  97.  
  98. template <class _DataType>
  99. bool ListIterator<_DataType>::operator==(const ListIterator<_DataType>& p_iter) const // перегрузка ==
  100. {
  101. return m_iter == p_iter.m_iter;
  102. }
  103.  
  104. template <class _DataType>
  105. _DataType& ListIterator<_DataType>::operator*() const // перегрузка разыменования
  106. {
  107. return m_iter->m_data;
  108. }
  109.  
  110. template <class _DataType>
  111. ListIterator<_DataType>& ListIterator<_DataType>::operator++() // перегрузка префиксного инкремента
  112. {
  113. m_iter = m_iter->m_next;
  114. return *this;
  115. }
  116.  
  117. template <class _DataType>
  118. ListIterator<_DataType>& ListIterator<_DataType>::operator--() // перегрузка префиксного декремента
  119. {
  120. m_iter = m_iter->m_prev;
  121. return *this;
  122. }
  123.  
  124. template <class _DataType>
  125. ListIterator<_DataType> ListIterator<_DataType>::operator++(int) // перегрузка постфиксного инкремента
  126. {
  127. ListIterator<_DataType> p_iter(*this);
  128. m_iter = m_iter->m_next;;
  129. return p_iter;
  130. }
  131.  
  132. template <class _DataType>
  133. ListIterator<_DataType> ListIterator<_DataType>::operator--(int)// перегрузка постфиксного декремента
  134. {
  135. ListIterator<_DataType> p_iter(*this);
  136. --*(this);
  137. return p_iter;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement