Я должен реализовать этот двусвязный список. Списку нужен передний указатель, указывающий на первый допустимый элемент, и задний указатель, указывающий на последний допустимый элемент.
Моя проблема с этим кодом связана с последними несколькими строками, когда мне нужно реализовать T & back и определить конечный итератор. То, что у меня есть в настоящее время, не работает.
#ifndef List_dllist_h
#define List_dllist_h
#include <iterator>
template <class T>
class DList
{
struct Node
{
Node(const T& x,Node* y = 0):m_data(x),m_next(y),m_prev(y){}
T m_data;
Node* m_next;
Node* m_prev;
};
Node* m_head;
Node* m_back;
public:
class iterator
{
Node* m_rep;
public:
friend class DList;
inline iterator(Node* x=0):m_rep(x){}
inline iterator(const iterator& x):m_rep(x.m_rep) {}
inline iterator& operator=(const iterator& x)
{
m_rep=x.m_rep; return *this;
}
inline iterator& operator++()
{
m_rep = m_rep->m_next; return *this;
}
inline iterator operator++(int)
{
iterator tmp(*this); m_rep = m_rep->m_next; return tmp;
}
inline iterator& operator--()
{
m_rep= m_rep->m_prev; return *this;
}
inline iterator operator--(int)
{
iterator tmp(*this); m_rep= m_rep->m_prev; return tmp;
}
inline T& operator*() const { return m_rep->m_data; }
inline Node* operator->() const { return m_rep; }
inline bool operator==(const iterator& x) const
{
return m_rep == x.m_rep;
}
inline bool operator!=(const iterator& x) const
{
return m_rep != x.m_rep;
}
};
DList() : m_head(0), m_back(0) {}
~DList() { clear(); }
inline T& front() { return *begin(); }
inline const T& front() const { return *begin(); }
inline T& back() { return *--end(); }
inline const T& back() const { return *--end(); }
inline iterator begin() { return iterator(m_head); }
inline iterator end() { return iterator(m_back); }
};
#endif
Изменить: добавлен --operator