初始为10,动态扩张,动态收缩没写(内容少于1/4时收缩)
#ifndef M_STACK_H
#define M_STACK_H
#include<iostream>
template<class T>
class m_Stack
{
private:
int Capacity;
T *m_StackBase;
size_t Length;
void IfOverflow();
public:
m_Stack():Capacity(10),m_StackBase(new T[Capacity]),Length(0){};
~m_Stack(){ delete []m_StackBase;}
bool Empty(){ return Length==0; }
bool Full(){ return Capacity==Length; }
size_t GetLen(){ return Length; }
T GetTop(){ return m_StackBase + Length-1; }
T Pop();
void Push(const T&);
};
template<class T>T m_Stack<T>::Pop()
{
if (Length == 0) //栈为空
throw std::out_of_range("m_Stack is empty!");
else
return *(m_StackBase + --Length);
}
template<class T>void m_Stack<T>::Push(const T& n)
{
IfOverflow();
*(m_StackBase + Length++) = n;
}
template<class T>void m_Stack<T>::IfOverflow()
{
if(Full())
{
T *p = m_StackBase;//保存栈内容
delete m_StackBase;//释放动态分配内存
m_StackBase = new int[Capacity*=2];//分配双倍的内存
memmove(m_StackBase,p,Length);
}
}
#endif