STL - list
结点 ListNode
作为储存数据的单元位。
template<class T>
struct ListNode
{
T _val;
ListNode* _next;
ListNode* _prev;
ListNode()
:_val(0)
,_next(nullptr)
,_prev(nullptr)
{
}
};
迭代器 ListIterator
作为访问节点的工具。
template<class T,class Ptr, class Ref>
class ListIterator
{
private:
typedef ListNode<T>* PNode;
typedef ListIterator<T,Ptr,ref> Self;
public:
PNode it;
ListIterator(PNode x = nullptr)
:it(x)
{
}
Ptr operator-> ()
{
return &(it->_val);
}
Ref operator* ()
{
return it->val;
}
Self& operator++ ()
{
it=it->_next;
return *this;
}
Self operator++ (int)
{
Self ret = it;
it = it-> _next;
return ret;
}
Self& operator-- ()
{
it=it->_prev;
return *this;
}
Self operator-- (int)
{
Self ret = it;
it = it-> _prev;
return ret