国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 模擬實現list(迭代器)實現代碼

2020-01-26 14:07:49
字體:
來源:轉載
供稿:網友

C++ 模擬實現list(迭代器)

實現代碼:

#pragma once; #include <assert.h> #include<iostream> #include <assert.h> using namespace std; template<class T> struct __ListNode {    T _data;    __ListNode<T>* _next;    __ListNode<T>* _prev;    __ListNode(const T& x)      :_data(x)      ,_next(NULL)      ,_prev(NULL)    {    } }; template <class T,class Ref,class Ptr > struct __ListIterator {   typedef __ListNode<T>  Node;   typedef __ListIterator<T,Ref,Ptr> 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<class T> struct List {   typedef __ListNode<T> Node; public:   typedef __ListIterator<T,T&,T*> Iterator;   typedef __ListIterator<T,const T&,const T*> 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<int>& l) {   List<int>::ConstIterator It=l.Begin();   while(It!=l.End())   {      cout<<*It<<" ";     ++It;   }   cout<<endl;}  void TestList2() {   List<int> 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<int> 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; } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 威信县| 西盟| 宣恩县| 都江堰市| 永顺县| 平舆县| 包头市| 阿荣旗| 新绛县| 浑源县| 大宁县| 信阳市| 石楼县| 芮城县| 高邮市| 淮滨县| 修水县| 德化县| 新巴尔虎左旗| 商丘市| 浑源县| 宜昌市| 高邑县| 翼城县| 磴口县| 商南县| 正镶白旗| 凌源市| 金坛市| 泰宁县| 广宁县| 武义县| 清水河县| 石城县| 台北市| 田东县| 山丹县| 浙江省| 丰都县| 黔江区| 雷州市|