复习(数据结构):链表: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
原创粉丝点击