使用多态实现一个线性表

/*
 使用多态实现一个线性表(队列,串,堆栈)
 要求:
 具有线性表的基本操作:插入,删除,测长等。

  思路:
      队列,堆栈都以实现push,pop,测长等操作。
      现在要求用多态实现,就要建立一个线性表的共性模板,来实现以上功能。
*/
#include<iostream>
using namespace std;
template<typename T>
class Tcontainer
{
public:
    virtual void push(const T& ) = 0;
    virtual void pop() = 0;
    virtual const T& begin() = 0;
    virtual const T& end() = 0;
    virtual size_t size()  = 0;
};


template<typename T>
class Tvector:public Tcontainer<T>
{
public:
    static const size_t _step  = 100 ;
    Tvector()
    {
        _size = 0;
        _cap = _step;
        buf = 0;
        re_capacity(_cap);
    }

    ~Tvector()
    {
        free(buf);
    }

    void re_capacity(size_t s)
    {
        if(!buf)
        {
            buf = (T*)malloc(sizeof(T)*s);
        }
        else
            buf = (T*)realloc(buf,sizeof(T)*s);
    }

    virtual void push(const T& v)
    {
        if(_size >= _cap)
        {
            re_capacity(_cap += _step);
        }

        buf[_size++]  = v;
    }

    virtual void pop()
    {
        if(_size)
        {
            _size--;
        }
    }

    virtual const T& begin()
    {
        return buf[0];
    }

    virtual const T& end()
    {
        if(_size)
            return buf[_size -1];
    }

    virtual size_t size()
    {
        return _size;
    }

    const T& operator[] (size_t i)
    {
        if( i >= 0 && i < _size)
        {
            return buf[i];
        }
    }
private:
    size_t _size;
    size_t _cap;
    T* buf;
};


int main()
{
    Tvector<int> v;
    for(int i = 0; i < 100; ++i )
    {
        v.push(i);
    }

    for(int i = 0; i<100;++i)
    {
        cout<<v[i]<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/dai_wen/article/details/81509515