/*
使用多态实现一个线性表(队列,串,堆栈)
要求:
具有线性表的基本操作:插入,删除,测长等。
思路:
队列,堆栈都以实现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;
}
【数据结构】使用多态实现一个线性表
最新推荐文章于 2022-06-25 22:29:30 发布