实现代码
#pragma once//防止文件重复包含
#include<iostream>
using namespace std;
template<class T>
class Stack
{
public:
Stack()
:_pData(new T[3])
, _capacity(3)
, _size(0)
{}
void Push(const T& data)
{
CheckCapacity();
_pData[_size++] = data;
}
void Pop()
{
_size--;
}
size_t Size()const
{
return _size;
}
size_t Capacity()const
{
return _capacity;
}
bool Empty()const
{
return 0 == _size;
}
T& top()//栈顶
{
return _pData[_size - 1];
}
T& top()const
{
return _pData[_size - 1];
}
private:
void CheckCapacity()
{
size_t size = Size();
size_t capacity = Capacity();
size_t newcapacity = 2 * capacity + 2;
if (size >= capacity)
{
//增容
T* tmp = new T[newcapacity];
for (size_t i = 0; i<size; i++)
{
tmp[i] = _pData[i];
}
delete[] _pData;//释放旧空间
_pData = tmp;
}
}
private:
T* _pData;
size_t _capacity;
size_t _size;
};
测试代码
void Test()
{
Stack<int> s;
s.Push(1);
s.Push(2);
s.Push(3);
cout << "s.top="<<s.top() << endl;
s.Pop();
cout << "s.top=" << s.top() << endl;
}
int main()
{
Test();
system("pause");
return 0;
}