复习(数据结构):链表:c++:stl

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值