动态顺序栈的实现
#define N 5
#define M 2
template <class T>
class Stack
{
public:
Stack()
:_array(new T[N])
, _capacity(N)
, _size(0)
{}
void Push(const T& data)
{
CheckCapacity();
_array[_size++] = data;
}
void Pop()
{
if (!Empty())
{
_size--;
}
}
T& Top()
{
return _array[_size-1];
}
T& Top()const
{
return _array[_size-1];
}
size_t Size()const
{
return _size;
}
size_t Capacity()const
{
return _capacity;
}
bool Empty()const
{
return _size == 0;
}
private:
void CheckCapacity()
{
size_t size = Size();
size_t capacity = Capacity();
size_t newcapacity = capacity*M;
if (_size >= _capacity)
{
T* newarray = new T[newcapacity];
for (size_t i = 0; i < size; i++)
{
newarray[i] = _array[i];
}
delete[] _array;
_array = newarray;
_capacity = newcapacity;
}
}
private:
T* _array;
s