C++ 模拟实现list(迭代器)实现代码

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; } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

任何的限制,都是从自己的内心开始的。

C++ 模拟实现list(迭代器)实现代码

相关文章:

你感兴趣的文章:

标签云: