Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<class _DataType>
- class ListIterator
- {
- Node<_DataType> *m_iter = new Node<_DataType>;
- public:
- ListIterator(); // конструктор по умолчанию
- explicit ListIterator(Node<_DataType> *p_node); // конструктор
- ListIterator(const ListIterator<_DataType> &p_iter); // конструктор копирования
- ~ListIterator(); // деструктор
- const ListIterator& operator=(const ListIterator<_DataType> &p_iter); // перегрузка = ???
- bool operator!=(const ListIterator<_DataType> &p_iter) const; // перегрузка !=
- bool operator==(const ListIterator<_DataType> &p_iter) const; // перегрузка ==
- _DataType& operator*() const; // перегрузка разыменования
- ListIterator& operator++(); // перегрузка префиксного инкремента
- ListIterator& operator--(); // перегрузка префиксного декремента
- ListIterator operator++(int); // перегрузка постфиксного инкремента
- ListIterator operator--(int); // перегрузка постфиксного декремента
- _DataType* operator->(); // Error
- ListIterator operator+(int);
- ListIterator<_DataType> operator-(int);
- void operator()(int &count);
- friend ListIterator<_DataType> List<_DataType>::insert(ListIterator<_DataType> &pos, _DataType &&value);
- friend ListIterator<_DataType> List<_DataType>::insert(ListIterator<_DataType> pos, ListIterator<_DataType> beg, const ListIterator<_DataType> &end);
- friend ListIterator<_DataType> List<_DataType>::erase(ListIterator<_DataType> &pos);
- };
- void ListIterator<std::string>::operator()(int &count)
- {
- for (int i = 0; i < (m_iter->m_data).length(); ++i)
- {
- if (std::isalpha(m_iter->m_data[i]))
- count++;
- }
- }
- template<class _DataType>
- _DataType* ListIterator<_DataType>::operator->()
- {
- return &(m_iter->m_data);
- }
- template<class _DataType>
- inline ListIterator<_DataType> ListIterator<_DataType>::operator+(int)
- {
- return ListIterator<_DataType>(m_iter->m_next);
- }
- template<class _DataType>
- inline ListIterator<_DataType> ListIterator<_DataType>::operator-(int)
- {
- return ListIterator<_DataType>(m_iter->m_prev);
- }
- template<class _DataType>
- ListIterator<_DataType>::ListIterator() // конструктор по умолчанию
- {
- m_iter = new Node<_DataType>;
- }
- template<class _DataType>
- ListIterator<_DataType>::ListIterator(Node<_DataType> *p_node) : m_iter(p_node) {} // конструктор
- template <class _DataType>
- ListIterator<_DataType>::ListIterator(const ListIterator<_DataType> &p_iter) // конструктор копирования
- {
- m_iter->m_data = p_iter.m_iter->m_data;
- m_iter->m_next = p_iter.m_iter->m_next;
- m_iter->m_prev = p_iter.m_iter->m_prev;
- }
- template<class _DataType>
- ListIterator<_DataType>::~ListIterator() // деструктор
- {
- //delete m_iter;
- m_iter = nullptr;
- }
- template <class _DataType>
- const ListIterator<_DataType>& ListIterator <_DataType>::operator=(const ListIterator<_DataType>& p_iter) // перегрузка = ???
- {
- if (this == &p_iter) return *this;
- m_iter->m_data = p_iter.m_iter->m_data; // ????
- m_iter->m_next = p_iter.m_iter->m_next;
- m_iter->m_prev = p_iter.m_iter->m_prev;
- }
- template <class _DataType>
- bool ListIterator<_DataType>::operator!=(const ListIterator<_DataType> &p_iter) const // перегрузка !=
- {
- if (m_iter != p_iter.m_iter) return true;
- return false;
- }
- template <class _DataType>
- bool ListIterator<_DataType>::operator==(const ListIterator<_DataType>& p_iter) const // перегрузка ==
- {
- return m_iter == p_iter.m_iter;
- }
- template <class _DataType>
- _DataType& ListIterator<_DataType>::operator*() const // перегрузка разыменования
- {
- return m_iter->m_data;
- }
- template <class _DataType>
- ListIterator<_DataType>& ListIterator<_DataType>::operator++() // перегрузка префиксного инкремента
- {
- m_iter = m_iter->m_next;
- return *this;
- }
- template <class _DataType>
- ListIterator<_DataType>& ListIterator<_DataType>::operator--() // перегрузка префиксного декремента
- {
- m_iter = m_iter->m_prev;
- return *this;
- }
- template <class _DataType>
- ListIterator<_DataType> ListIterator<_DataType>::operator++(int) // перегрузка постфиксного инкремента
- {
- ListIterator<_DataType> p_iter(*this);
- m_iter = m_iter->m_next;;
- return p_iter;
- }
- template <class _DataType>
- ListIterator<_DataType> ListIterator<_DataType>::operator--(int)// перегрузка постфиксного декремента
- {
- ListIterator<_DataType> p_iter(*this);
- --*(this);
- return p_iter;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement