以模板模拟实现List容器
来源:互联网 发布:淘宝发布产品找不到 编辑:程序博客网 时间:2024/06/16 08:17
#pragma once#include <iostream>using namespace std;template<class T>struct ListNode{ListNode(const T& x = T()): _prev(0), _next(0), _value(x){}ListNode<T>* _prev;ListNode<T>* _next;T _value;};template<class T, class Ref, class Ptr>struct __ListIterator__{typedef __ListIterator__<T, T&, T*> Iterator;typedef __ListIterator__<const T, const T&, const T*> ConstItrator;typedef __ListIterator__<T, Ref, Ptr> Self;typedef T ValueType;typedef Ref Reference;typedef Ptr Pointer;typedef ListNode<T>* LinkType;typedef size_t SizeType;LinkType _node;__ListIterator__(LinkType x):_node(x){}__ListIterator__():_node(0){}__ListIterator__(const Iterator& x){_node=x._node;}bool operator==(const Iterator& x){return _node==x._node;}bool operator!=(const Iterator& x){return _node!=x._node;}Reference operator*(){return (*_node)._value;}Pointer operator->(){return &((*_node)._value);}Self& operator++(){_node=_node->_next;return *this;}Self operator++(int){Iterator tmp=*this;_node=_node->_next;return tmp;}Self& operator--(){_node=_node->_prev;return *this;}Self operator--(int){Iterator tmp=*this;_node=_node->_prev;return tmp;}};template<class T>class List{public:typedef ListNode<T> Node;typedef T ValueType;typedef ValueType* Pointer;typedef const ValueType* ConstPointer;typedef ValueType& Reference;typedef const ValueType& ConstReference;typedef Node* LinkType;typedef size_t SizeType;typedef __ListIterator__<T, T&, T*> Iterator;typedef __ListIterator__<const T, const T& ,const T*> ConstIterator;List(){_node=new Node;_node->_next=_node;_node->_prev=_node;}Iterator Begin(){Iterator it;it._node=_node->_next;return it;}ConstIterator Begin()const{Iterator it;it._node=_node->_next;return it;}Iterator End(){Iterator it;it._node=_node;return it;}ConstIterator End()const{Iterator it;it._node=_node;return it;}bool Empty()const{return _node->_next==_node;}SizeType Size()const{Iterator it=Begin();SizeType count=0;while(it!=End()){it++;count++;}return count;}Reference Front(){return *Begin();}ConstReference Front()const{return *Begin();}Reference Back(){return *(--End());}ConstReference Back()const{return *(--End());}Iterator Insert(Iterator pos, const T& x){LinkType pnode=new Node(x);pnode->_next=pos._node;pnode->_prev=pos._node->_prev;pos._node->_prev->_next=pnode;pos._node->_prev=pnode;return pos;}void PushFront(const T& x){Insert(Begin(),x);}void PushBack(const T& x){Insert(End(),x);}Iterator Erase(Iterator pos){pos._node->_prev->_next=pos._node->_next;pos._node->_next->_prev=pos._node->_prev;Iterator it=pos;it++;delete pos._node;return it;}void PopFront(){if(Empty())return ;Erase(Begin());}void PopBack(){if(Empty())return ;Erase(--End());}void Clear(){Iterator it=Begin();while(it!=End()){Iterator tmp=it;it++;delete tmp._node;}it._node->_next=it._node;it._node->_prev=it._node;}List(const List<T>& l){_node=new Node;_node->_next=_node;_node->_prev=_node;Iterator it=l.Begin();while(it!=l.End()){PushBack(it._node->_value);it++;}}List& operator=(const List& l){if(this!=&l){Clear();Iterator it=l.Begin();while(it!=l.End()){PushBack(it._node->_value);it++;}}}~List(){Iterator it=Begin();while(it!=End()){Iterator tmp=it;it++;delete tmp._node;}delete it._node;}protected:LinkType _node;};
0 0
- 以模板模拟实现List容器
- 以模板模拟实现Vector容器
- 模板类模拟实现List
- 模拟实现STL中的List容器
- 模拟实现容器List(迭代器)
- C++模拟实现容器list(含迭代器)
- 使用模板类实现List容器&迭代器
- 类模板模拟实现STL中List
- STL容器中list与迭代器iterator的模拟实现
- STL--> list 双向循环链表容器 接口使用及介绍。 模拟实现 STL list容器
- STL List容器 简单模拟
- 模拟实现vector容器
- list 容器实现
- list容器的实现
- 【c++模板】模拟实现有模板的双向链表(List)(声明和定义分离)
- <STL>模拟实现List
- C++::模拟实现List
- STL-模拟实现List
- linux下vim操作
- poj 2449 K 短路(不严格)
- Oracle 错误总结及问题解决 ORA
- 某厂软件培训之Java班
- 0317-a标签与它的路径问题
- 以模板模拟实现List容器
- cocos2d-x 3.x 加载网络图片并
- 数字排序转变为字母排序
- 【matlab】 GMSK的调制与解调【附详尽注释】
- bzoj 3232 01分数规划
- Mac 环境下Android studio无法打开解决
- 同步访问共享数据【Effective java第10章】
- 访问修饰符
- SQL优化总结