C++类模板实现数据结构——栈

以下是本人用C++类模板实现的一种数据结构——栈。希望对别人有所帮助,也希望有人给出意见!毕竟我也是很少用模板这东西,新手一个。

#ifndef _STACK_H_INCLUDED
#define _STACK_H_INCLUDED


template
class Stack
{
	public:
		Stack(size_t capacity = 8):
            _capacity(capacity),
            _arry(new T[_capacity]),
            _length(0),
            _top(_arry){}


		~Stack();
		inline void clearStack();


		inline bool isEmpty()const;
		inline size_t getSize()const;
		inline size_t getCapacity()const;
		void push(const T& e);
		inline T pop();
		inline const T& getTop()const;
	private:
        Stack(const Stack &s){}
        Stack& operator=(const Stack &s){return *this;}


		size_t _capacity;
		T *_arry;
		size_t _length;
		T *_top;
};


//template
//Stact::Stack(size_t capacity):
//    _capacity(capacity),
//    _arry(new T[_capacity]),
//    _length(0),
//    _top(_arry)
//{
//}


template
Stack::~Stack()
{
    delete []_arry;
}


template
const T& Stack::getTop()const
{
	if(!isEmpty())
		return *(_top - 1);
	else
		return *_top;
}


template
void Stack::push(const T &e)
{
	if(_length < _capacity)
	{
		*_top = e;
		++_top;
	}
	else
	{
		T *tmp(new T[2*_capacity]);
		T *const head(tmp);
		T *old(_arry);
		for(int i = 0; i < _length; ++i)
		{
			*tmp = *old;
			++tmp;
			++old;
		}
		_capacity *= 2;
		delete []_arry;
		_arry = head;
		*tmp = e;
		_top = ++tmp;
	}
	++_length;
}


template
void Stack::clearStack()
{
    _length = 0;
    _top = _arry;
}


template
T Stack::pop()
{
    --_length;
    return *(--_top);
}


template
bool Stack::isEmpty()const
{
    return _length == 0;
}


template
size_t Stack::getSize()const
{
    return _length;
}


template
size_t Stack::getCapacity()const
{
    return _capacity;
}


#endif // _STACK_H_INCLUDED
PS:在代码中有一个注释起来的地方,是该模板类的构造函数,本人本想把它在类外实现,但是编译错误,弄了好久,始终找不到原因,希望知道错误之处的读者能为我指点迷津,谢谢!

你可能感兴趣的:(数据结构和算法)