#pragma once
template<class T>
class Stack
{
public:
Stack()
:_size(0)
, _capacity(3)
, _arr(new T[_capacity]) //刚用new T(_capacity) 也成功了
{}
~Stack()
{
if (_arr)
{
delete[] _arr; //用了[]和不用[]好像没有太大区别 自己写的小程序内存泄露了对电脑有什么伤害
}
}
public:
void push(const T &x)
{
if (_size == _capacity)
_bordenCapacity();
_arr[_size++] = x;
}
void pop()
{
if (_size != 0)
--_size;
}
T& top()
{
if (_size != 0)
return _arr[_size];
}
const T& top() const
{
if (_size != 0)
return _arr[_size];
}
inline size_t size(){ return _size; }
inline bool empty(){ return _size == 0; }
void _bordenCapacity()
{
_capacity = 3 * _capacity + 2;
T *tmp = new T[_capacity]; //C++里面将realloc函数怎么了
for (size_t i = 0; i < _size; i++) //memmove不能实现吗
{
tmp[i] = _arr[i];
}
delete _arr;
_arr = tmp;
}
void print()
{
for (size_t i = 0; i < _size; i++)
{
cout << _arr[i];
if (i != _size - 1)
cout << "->";
}
cout << endl;
}
private:
size_t _size;
size_t _capacity;
T* _arr;
};
动态数组实现stack
最新推荐文章于 2019-12-11 09:14:20 发布