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

来源:互联网 发布:汉诺塔问题算法 编辑:程序博客网 时间:2024/05/17 06:04

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

#ifndef _STACK_H_INCLUDED#define _STACK_H_INCLUDEDtemplate<typename T>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<typename T>//Stact<T>::Stack(size_t capacity)://    _capacity(capacity),//    _arry(new T[_capacity]),//    _length(0),//    _top(_arry)//{//}template<typename T>Stack<T>::~Stack(){    delete []_arry;}template<typename T>const T& Stack<T>::getTop()const{if(!isEmpty())return *(_top - 1);elsereturn *_top;}template<typename T>void Stack<T>::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<typename T>void Stack<T>::clearStack(){    _length = 0;    _top = _arry;}template<typename T>T Stack<T>::pop(){    --_length;    return *(--_top);}template<typename T>bool Stack<T>::isEmpty()const{    return _length == 0;}template<typename T>size_t Stack<T>::getSize()const{    return _length;}template<typename T>size_t Stack<T>::getCapacity()const{    return _capacity;}#endif // _STACK_H_INCLUDED
PS:在代码中有一个注释起来的地方,是该模板类的构造函数,本人本想把它在类外实现,但是编译错误,弄了好久,始终找不到原因,希望知道错误之处的读者能为我指点迷津,谢谢!

原创粉丝点击