/适用多态实现线性表(队列、传、堆栈),要求具备线性表的基本操作:插入、删除、测长等/
队列、串、堆栈都可以实现Push pop 测长等操作,现在要用多态去实现,就要建立一个线性表的共性模板来实现功能,
#include<iostream>
using namespace std;
template<typename t>
struct tcontainer
{
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>
struct tvector:public tcontainer<t>
{
static const size_t _step = 100;
tvector()
{
_size = 0; //初始化向量实际大小
cap = _step; //向量容量为100
buf = 0; //首地址,需要动态分配内存
re_capacity(cap);//此时buf为空,即要设置buf初始值,配了100个元素的空间
}
~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);
}
void push(const t&v)
{
if (_size>=cap)
{
re_capacity(cap += _step);
}
buf[_size++] = v;
}
void pop()
{
if (_size)
{
_size--;
}
else
{
cout << "内存已空" << endl;
}
}
virtual const t& begin()
{
return buf[0];
}
virtual const t& end()
{
if (_size)
{
return buf[_size - 1];
}
}
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 < 101; ++i)
{
v.push(i);
}
for (int i=0;i<101;++i)
{
cout << v[i] << endl;
}
cout << "test= " << v.begin() << endl;
return 0;
}