List
来源:互联网 发布:单片机编译链接 编辑:程序博客网 时间:2024/04/27 19:28
template <typename Object>class List{private: struct Node{ Object data; Node *prev; Node *next; Node(const Object & d=Object(),Node *p=NULL,Node *n=NULL) :data(d),prev(p),next(n){} };public: class const_iterator{ public: const_iterator():current(NULL){} const Object & operator*() const{ return retrieve(); } //前++ const_iterator & operator++(){ current=current->next; return *this; } //后++ const_iterator operator++(int){ const_iterator old=*this; ++(*this); return old; } bool operator==(const const_iterator & rhs) const { return current==rhs.current; } bool operator!=(const const_iterator & rhs) const { return current!=rhs.current; } protected: Node *current; const List<Object> *theList; Object & retrieve() const{ return this->current->data; } const_iterator(const List<Object> & lst,Node *p) :current(p),theList(&lst){} void assertIsValid() const{ if(theList==NULL||current==NULL||current==theList->head){ cout<< "false"; } } friend class List<Object>; }; class iterator:public const_iterator{ public: iterator(){}; Object & operator*(){ return this->retrieve(); }; const Object & operator*() const{ return const_iterator::operator*(); } iterator &operator++(){ this->current=this->current->next; return *this; } iterator operator++(int){ iterator old=*this; ++(*this); return old; } protected: iterator(const List<Object> & lst,Node *p):const_iterator(lst,p){} friend class List<Object>; };public: List(){ init(); } ~List(){ clear(); delete head; delete tail; } List(const List & rhs){ init(); *this=rhs; } const List & operator=(const List &rhs){ if(this==&rhs){ return *this; } clear(); for(const_iterator itr=rhs.begin();itr!=rhs.end();itr++){ push_back( *itr ); } return *this; } iterator begin(){ return iterator(*this,head->next); } const_iterator begin() const{ return const_iterator(*this,head->next); } iterator end(){ return iterator(*this,tail); } const_iterator end() const{ return const_iterator(*this,tail); } int size() const{ return theSize; } bool empty() const{ return size()==0; } void clear(){ while(!empty()){ pop_front(); } } Object & front(){ return *begin(); }; const Object & front() const{ return *begin(); } Object & back(){ return *--end(); } const Object & back() const{ return *--end(); } void push_front(const Object & x){ insert(begin(),x); } void push_back(const Object & x){ insert(end(),x); } void pop_front(){ erase(begin()); } void pop_back(){ erase(--end()); } iterator insert(iterator itr,const Object & x){ //在itr前面插入 itr.assertIsValid(); Node *p=itr.current; theSize++; //Node *newNode=new Node(x,p->prev,p); //p->prev->next=newNode; //p->prev=newNode; return iterator(*this,p->prev=p->prev->next=new Node(x,p->prev,p)); } iterator erase(iterator itr){ //删除当前指向的节点 Node *p=itr.current; //赋值 iterator retval(*this,p->next); p->prev->next=p->next; p->next->prev=p->prev; delete p; theSize--; return retval; } iterator erase(iterator start,iterator end){ for(iterator itr=start;itr!=end;){ itr=erase(itr); } return end; }private: int theSize; Node *head; Node *tail; void init(){ theSize=0; head=new Node; tail=new Node; head->next=tail; tail->prev=head; }};
按照<<数据结构与算法分析 C++描述>>重新敲了一遍
0 0
- List
- list
- List
- LIST
- list
- list
- List
- list
- list
- List
- list
- LIST
- List
- List
- List
- list
- list
- list
- 网易视频云首推多路互动直播,首批测试邀请火爆来袭
- python抓页面基础知识
- 唯一性索引的意义
- php获取本周日期,及本周起始时间
- IDEA工具web.xml报错param-value element not allow here
- List
- CSS实现footer一直在页面底部
- 应对氧化应激改善糖尿病治疗
- 进程上下文VS中断上下文
- 关于C++ const 的全面总结
- Java多线程理解
- hdu 1999 可摸数问题
- Tensorflow - Tutorial (6) : TensorBoard 可视化工具
- android camera setParameters failed