C++ 模拟实现list(迭代器)实现代码
C++模拟实现list(迭代器)
实现代码:
#pragmaonce; #include#include #include usingnamespacestd; template struct__ListNode { T_data; __ListNode *_next; __ListNode *_prev; __ListNode(constT&x) :_data(x) ,_next(NULL) ,_prev(NULL) { } }; template struct__ListIterator { typedef__ListNode Node; typedef__ListIterator Self; __ListIterator(Node*node) :_node(node) { } Refoperator*() { return_node->_data; } Ptroperator->() { return&(_node->_data) } Self&operator++() { _node=_node->_next; return*this; } Self&operator--() { _node=_node->_prev; return*this; } Selfoperator++(int) { Selftmp=_node; _node=_node->_next; //returntmp; returnSelf(tmp) } Selfoperator--(int) { Selftmp=(*this); _node=_node->_prev; returntmp; } booloperator!=(constSelf&s)const { returnthis->_node!=s._node; } booloperator==(constSelf&s)const { returnthis->_node==s._node; } Node*_node; }; template structList { typedef__ListNode Node; public: typedef__ListIterator Iterator; typedef__ListIterator ConstIterator; Node*GetNode(constT&x) { returnnewNode(x); } List() { _head=GetNode(T()); _head->_next=_head; _head->_prev=_head; } IteratorBegin() { returnIterator(_head->_next); } IteratorEnd() { returnIterator(_head); } ConstIteratorBegin()const { returnConstIterator(_head->_next); } ConstIteratorEnd()const { returnConstIterator(_head); } voidPushBack(constT&x) { /*Node*_tail=_head->_prev; Node*tmp=GetNode(x); _tail->_next=tmp; tmp->_prev=_tail; tmp->_next=_head; _head->_prev=tmp;*/ Insert(End(),x); } voidPopBack() { /*assert(_head->_prev); Node*tail=_head->_prev; Node*prev=tail->_prev; Node*next=tail->_next; prev->_next=next; next->_prev=prev; deletetail;*/ Erase(--End()); } voidPushFront(constT&x) { /*assert(_head) Node*tmp=GetNode(x); Node*next=_head->_next; _head->_next=tmp; tmp->_prev=_head; tmp->_next=next; next->_prev=tmp;*/ Insert(Begin(),x); } voidPopFront() { /*assert(_head->_next); Node*tmp=_head->_next; Node*next=tmp->_next; _head->_next=next; next->_prev=_head; deletetmp;*/ Erase(Begin()); } IteratorInsert(Iteratorpos,constT&x) { assert(pos._node); Node*tmp=GetNode(x); Node*cur=pos._node; Node*prev=cur->_prev; prev->_next=tmp; tmp->_prev=prev; tmp->_next=cur; cur->_prev=tmp; returntmp; } IteratorErase(Iteratorpos) { assert(pos._node&&pos._node!=NULL); Node*tmp=pos._node; Node*next=tmp->_next; Node*prev=tmp->_prev; next->_prev=prev; prev->_next=next; deletetmp; returnIterator(next); } protected: Node*_head; }; voidPrintList(constList &l) { List ::ConstIteratorIt=l.Begin(); while(It!=l.End()) { cout<<*It<<""; ++It; } cout< l2; l2.PushBack(1); l2.PushBack(2); l2.PushBack(3); l2.PushBack(4); l2.PopBack(); l2.PopBack(); l2.PopBack(); l2.PopBack(); l2.PopBack(); PrintList(l2); } voidTestList3() { List l3; l3.PushFront(1); l3.PushFront(2); l3.PushFront(3); l3.PushFront(4); l3.PopFront(); l3.PopFront(); l3.PopFront(); PrintList(l3); } 
#include"List.h"
intmain()
{
//TestList1();
//TestList2();
TestList3();
return0;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!