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