#define _CRT_SECURE_NO_WARNINGS
namespace list
{
template <class t>
class list_node
{
T _data;
list_node<T>* _next;
list_node<T>* _prev;
list_node(const T& x = T())//匿名对象
:_data(x)
,_next(nullptr)
,_prev(nullptr)
{}
};
template <class T>
struct __list_iterator
{
typedef list_node<T> Node;
Node* _node;
__list_iterator(Node* node)
:_node(node)
{}
bool operator != (const iterator& it) const
{
return _node != it->_node;
}
T& operator*()
{
return _node->_data;
}
iterator& operator++()
{
_node = _node->_next;
}
iterator& operator++(int)//后置加加添加了一个参数,为了区分前置加加
{
iterator tmp(*this);
_node = _node->_next;
return tmp;
}
};
template <class T>
class list
{
typedef list_node<T> Node;
public:
typedef __list_iterator<T> iterator;
iterator begin()
{
return iterator(_head->_next);
}
iterator end()
{
return iterator(_head);
}
list()
{
_head = new node;
_head->_next = _head;
_head->_prev = _head;
}
void push_back(const T& x)
{
Node* tail = _head->_prev;
Node* newnode = new Node(x);
tail->_next = newnode;
newnode->_next = _head;
newnode->_prev = _tail;
_head->_prev = newnode;
}
private:
Node* _head;
};
}