队列,串,堆栈都可以实现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);
}
}
virtual void push(const T& v)
{
if (_size >= _cap)
{
ew_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);
}
}