“test.cpp”
<strong><span style="font-size:18px;">#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; template<class T> struct ListNode { ListNode<T>* _prev; ListNode<T>* _next; T _data; ListNode(const T& data) :_prev(NULL) ,_next(NULL) ,_data(data) {} }; template<class T,class Ref,class Ptr> struct ListIterator { typedef ListNode<T> Node; typedef ListIterator<T,Ref,Ptr> Self; Node* _node; ListIterator(){} ListIterator(Node* node) :_node(node) {} bool operator==(const Self& s) const { return _node == s._node; } bool operator!=(const Self& s) const { return _node != s._node; } Self& operator++() { _node = _node->_next; return *this; } Self operator++(int) { Self tmp(_node); _node = _node->_next; return tmp; } Self& operator--() { _node = _node->_prev; return *this; } Self operator--(int) { Self tmp(_node); _node = _node->_prev; return tmp; } Ref operator*() { return _node->_data; } Ptr operator->() { return &(*_node->_data); } }; template<class T> class List { typedef ListNode<T> Node; public: typedef ListIterator<T,T&,T*> Iterator; public: Node* BuyNode(const T& data) { Node* tmp = new Node(data); return tmp; } List() { _head = BuyNode(T()); _head->_prev = _head; _head->_next = _head; } //void PushBack(const T& data) //{ // Node* tail = _head->_prev; // Node* node = BuyNode(data); // node->_prev = tail; // node->_next = tail->_next; // tail->_next = node; // _head->_prev = node; //} void PushBack(const T& data) { Insert(End(),data); } void PushFront(const T& data) { Insert(Begin(),data); } //在指定位置前的一个位置插入 void Insert(Iterator pos,const T& data) { Node* cur = pos._node; Node* prev = cur->_prev; Node* tmp = BuyNode(data); tmp->_prev = prev; tmp->_next = cur; prev->_next = tmp; cur->_prev = tmp; } void PopBack() { //Erase(Iterator(_head->_prev)); Erase(--End()); } void PopFront() { //Erase(Iterator(_head->_next)); Erase(Begin()); } //指定位置删除 void Erase(Iterator pos) { Node* del = pos._node; Node* prev = del->_prev; Node* cur = del->_next; prev->_next = cur; cur->_prev = prev; delete del; del = NULL; } Iterator Begin() { return Iterator(_head->_next); } Iterator End() { return Iterator(_head); } private: Node* _head; }; void test() { List<int> l; for(int i = 0;i < 5;i++) { l.PushBack(i); } for (int i = 5;i < 10;i++) { l.PushFront(i); } List<int>::Iterator it = l.Begin(); while (it != l.End()) { cout<<*it<<" "; it++; } cout<<endl; l.PopBack(); l.PopBack(); l.PopFront(); l.PopFront(); it = l.Begin(); while (it != l.End()) { cout<<*it<<" "; it++; } cout<<endl; } int main() { test(); system("pause"); return 0; }</span></strong>