复习(数据结构):链表:c++:stl
来源:互联网 发布:type3软件下载 编辑:程序博客网 时间:2024/05/21 09:27
1. 类框架
#include <stdio.h>#include <stdlib.h>#include <iostream>#include <queue>using namespace std;template<typename object>class List{private: struct Node{ };public: class const_iterator{ }; class iterator:public const_iterator{ };public: List() ; List(const List& rhs); ~List(); const List& operator= (const List& rhs); iterator begin(); const_iterator begin() const; iterator end(); const_iterator end() const; int size() const; bool empty() const; void clear(); object& front(); const object& front() const; object& back(); const object& back() const ; void push_front(const object& x); voide push_back(cosnt object& x); void pop_front(); void pop_back(); iterator insert(iterator itr,const object& x); iterator earse(iterator itr); iterator earse(iterator start,iterator end);private: int theSize; Node* head; Node* tail; void init(){ theSize=0; head=new Node; tail=new Node; head->next=tail; tail->prev=head; }};
2. 结构体
- struct默认为是公有的
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) { } };
3. 迭代器
- class iterator:public const_iterator:继承
public: class const_iterator{ public: const_iterator():current(NULL) //指向当前的指针 {} const object& oprator* () 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 !(*this==rhs);} protected: //子类可以访问(iterator) Node* current; object& retrieve() cosst {return current->data;} const_iterator(Node *p):current(p) {} friend class List<object>; //允许list类访问const_iterator的非公有成员 };
class iterator:public const_iterator{ public: iterator() { } object& operator*() {return retrieve();} const object& operator*() const { return const_iterator::operator*(); } iterator& operator++(){ current=current->next; return *this; } iterator operator++ (int){ iterator old=*this; ++(*this); return old; } iterator operator-- (){ current=current->prev; return *this; } iterator operator-- (int){ iterator old=*this; --(*this); return old; } protected: iterator(Node* p):const_iterator(p) {} friend class List<object>; };
4. 构造函数
List() {init();} List(const List& rhs){ init(); *this=rhs; } ~List(){ clear(); delete head; delete tail; } 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; }
5. 迭代器函数
iterator begin() {return iterator(head->next);} const_iterator begin() const {return const_iterator(head->next);} iterator end() {return iterator(tail);} const_iterator end() const {return const_iterator(tail);}
6.其他函数
iterator begin() {return iterator(head->next);} const_iterator begin() const {return const_iterator(head->next);} iterator end() {return iterator(tail);} const_iterator end() const {return const_iterator(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){ Node* p=itr.cuurent; theSize++; return iterator(p->prev=p->prev->next=new Node(x,p->prev,p)); } iterator earse(iterator itr){ Node* p=itr.current; iterator retVal(p->next); p->prev->next=p->next; p->nenxt->prev=p->prev; delete p; theSize--; return retVal; } iterator earse(iterator start,iterator end){ for(iterator itr=start;itr!=end;) itr=earse(itr); return end; }
7.私有成员和变量
private: int theSize; Node* head; Node* tail; void init(){ theSize=0; head=new Node; tail=new Node; head->next=tail; tail->prev=head; }
0 0
- 复习(数据结构):链表:c++:stl
- 复习(数据结构):链表:c语言
- 复习(数据结构):链表:c++:标准
- C++STL复习
- 复习(数据结构):线性表 : C
- 复习(数据结构):队列:c语言
- 复习(数据结构):字符串:c语言
- 复习(数据结构):树:C语言
- c语言数据结构复习(一)
- K&R复习,数据结构(C语言版)复习,算法导论复习
- 数据结构复习-链表
- STL复习
- C语言与数据结构复习重点
- 【C语言和数据结构复习】序
- 复习(数据结构):线性表 : C:动态分配内存
- 复习(数据结构):动态数组:c++_stl写法
- 复习(数据结构):栈:c语言:数组
- 复习(数据结构):栈:c语言:动态数组
- 杭电 1863 最小生成数
- JAVA循环的一些问题和创建对象的问题解答
- 【spring 5】AOP:spring中对于AOP的的实现
- static 常量区 数据区 堆栈 生命周期 作用域 c++ 以及脚本语言的区别
- deepin安装vsftpd(仅安装篇)
- 复习(数据结构):链表:c++:stl
- hdu-2480-Steal the Treasure-贪心+缩点
- header( "Content-Type: application/vnd.ms-excel")
- UML类图中类与类之间的关系及画法
- Java synchronized详解
- 在R中,如何计算Row Number呢?或者说是partition rank呢?
- linux内核简介
- 配置百度地图开发环境
- 各种数据类型的取值范围(总结全)