代码改变世界
2006-10-07 11:02
老博客哈
阅读(693)
评论()
编辑
收藏
举报
#pragma once
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#include <new>
#include <stdexcept>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template<typename T, int size = 100>
class stack
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
public:
stack();
~stack();
void push(const T & element);
T top() const;
bool empty() const;
void pop();
private:
T* data;
int currentsize;
};
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template<typename T, int size>
inline stack<T, size>::stack()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
data = new T[size];
currentsize = -1;
if( data == NULL )
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
throw std::bad_alloc();
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template<typename T, int size>
inline stack<T, size>::~stack()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
delete []data;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template<typename T, int size>
inline void stack<T, size>::push(const T &element)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if( currentsize == size - 1)
throw std::overflow_error( "stack push overflow" );
else
data[++currentsize] = element;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template<typename T, int size>
inline bool stack<T, size>::empty() const
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
return currentsize == -1;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template<typename T, int size>
inline T stack<T, size>::top() const
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if( empty() )
throw std::range_error("stack top range error");
else
return data[currentsize];
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
template<typename T, int size>
inline void stack<T, size>::pop()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
if( empty() )
throw std::range_error("stack pop range error");
else
--currentsize;
}
写着玩玩的, 当真用偶还是去用STL的!