实现列表迭代器和运算符:-- ++ *

Implementing a list iterator and operators: -- ++ *

从这个问题开始:

我想实现一个列表迭代器,它可以与其他常见容器类型及其各自的迭代器互换,所以我想使用运算符,例如:--、++、* 并能够正常声明迭代器,所以:list::iterator iter = list.begin();

--、++ 运算符现在可以正常工作,但我 运行 遇到了取消引用迭代器的问题,因为结构不能 return 值:T iterator::operator*()

template <class T> 
struct element {

  element<T> *prev = NULL;
  element<T> *next = NULL;
  T data;       
};


template <typename T>
class list {

public:

    list::list();

    element<T>* current;

    struct iterator{

        element<T>* iterator::operator++(){ 

           this = *this->next; ..whatever it works          
        }
        element<T>* iterator::operator--()
        T iterator::operator*()
   }    
};

迭代器可能看起来像这样:
(在列表模板内声明)

    struct iterator;
    struct const_iterator : public std::iterator<std::bidirectional_iterator_tag, const T>
    {
        const_iterator() = default;
        T operator*() { return itm->data; }
        const T* operator->() { return &(itm->data); }
        const_iterator operator++() { itm = itm->next; return *this; }
        const_iterator operator--() { itm = itm->prev; return *this; }
        const_iterator operator++(int) { const_iterator ret=*this; itm = itm->next; return ret; }
        const_iterator operator--(int) { const_iterator ret=*this; itm = itm->prev; return ret; }
        bool operator==(const_iterator oth) const { return itm==oth.itm; }
        bool operator!=(const_iterator oth) const { return itm!=oth.itm; }
    private:
        element<T>* itm = nullptr;
        const_iterator(element<T>* i) : itm(i) {}
    friend
        class list;
    friend
        struct iterator;
    };
    struct iterator : public std::iterator<std::bidirectional_iterator_tag, T>
    {
        iterator() = default;
        T& operator*() { return itm->data; }
        T* operator->() { return &(itm->data); }
        iterator operator++() { itm = itm->next; return *this; }
        iterator operator--() { itm = itm->prev; return *this; }
        iterator operator++(int) { iterator ret=*this; itm = itm->next; return ret; }
        iterator operator--(int) { iterator ret=*this; itm = itm->prev; return ret; }
        bool operator==(iterator oth) const { return itm==oth.itm; }
        bool operator!=(iterator oth) const { return itm!=oth.itm; }
        operator const_iterator() { return {itm}; }
    private:
        element<T>* itm = nullptr;
        iterator(element<T>* i) : itm(i) {}
    friend
        class list;
    };

    typedef std::reverse_iterator<iterator> reverse_iterator;
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

这需要

#include <iterator>

编译