这篇文章主要介绍了C++如何模拟实现list迭代器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
成都创新互联公司是一家集网站建设,灵台企业网站建设,灵台品牌网站建设,网站定制,灵台网站建设报价,网络营销,网络优化,灵台网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
C++ 模拟实现list(迭代器)
实现代码:
#pragma once; #include#include #include using namespace std; template struct __ListNode { T _data; __ListNode * _next; __ListNode * _prev; __ListNode(const T& x) :_data(x) ,_next(NULL) ,_prev(NULL) { } }; template struct __ListIterator { typedef __ListNode Node; typedef __ListIterator Self; __ListIterator(Node* node) :_node(node) { } Ref operator*() { return _node->_data; } Ptr operator->() { return &(_node->_data) } Self& operator++() { _node=_node->_next; return *this; } Self& operator--() { _node=_node->_prev; return *this; } Self operator++(int) { Self tmp=_node; _node=_node->_next; //return tmp; return Self(tmp) } Self operator--(int) { Self tmp=(*this); _node=_node->_prev; return tmp; } bool operator!=(const Self& s) const { return this->_node!=s._node; } bool operator==(const Self& s) const { return this->_node==s._node; } Node* _node; }; template struct List { typedef __ListNode Node; public: typedef __ListIterator Iterator; typedef __ListIterator ConstIterator; Node* GetNode(const T& x) { return new Node(x); } List() { _head=GetNode(T()); _head->_next=_head; _head->_prev=_head; } Iterator Begin() { return Iterator(_head->_next); } Iterator End() { return Iterator(_head); } ConstIterator Begin() const { return ConstIterator(_head->_next); } ConstIterator End() const { return ConstIterator(_head); } void PushBack(const T& x) { /* Node* _tail=_head->_prev; Node* tmp=GetNode(x); _tail->_next=tmp; tmp->_prev=_tail; tmp->_next=_head; _head->_prev=tmp;*/ Insert(End(),x); } void PopBack() { /* assert(_head->_prev ); Node* tail=_head->_prev; Node* prev=tail->_prev; Node* next=tail->_next; prev->_next=next; next->_prev=prev; delete tail;*/ Erase(--End()); } void PushFront(const T& 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); } void PopFront() { /*assert(_head->_next); Node* tmp=_head->_next; Node* next=tmp->_next; _head->_next= next; next->_prev=_head; delete tmp;*/ Erase(Begin()); } Iterator Insert(Iterator pos, const T& 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; return tmp; } Iterator Erase(Iterator pos) { assert(pos._node && pos._node!=NULL); Node* tmp=pos._node; Node* next=tmp->_next; Node* prev=tmp->_prev; next->_prev=prev; prev->_next=next; delete tmp; return Iterator(next); } protected: Node* _head; }; void PrintList(const List & l) { List ::ConstIterator It=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); } void TestList3() { 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" int main() { //TestList1(); //TestList2(); TestList3(); return 0; }
感谢你能够认真阅读完这篇文章,希望小编分享的“C++如何模拟实现list迭代器”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!