📄 xstack.h
字号:
//---------------------------------------------------------------------------
#ifndef XStackH
#define XStackH
//---------------------------------------------------------------------------
#ifndef XArrayH
#include <XArray.h>
#endif
namespace zdhsoft
{
/*
///////////////////////////////////////////////////////////////////////////////
[Name]XStack<T>
[Title]堆栈类
///////////////////////////////////////////////////////////////////////////////
[Description]
堆栈类模板,基于动态数组
主要的方法有Pop,Push
[Version]1.0
[Author]Rex Winter
[Date]2005-1-9
///////////////////////////////////////////////////////////////////////////////
*/
template<class T>
class XStack
{
public:
XStack(int iPrepareLength = 0);
~XStack();
//method
bool Empty() const
{
if( m_Data.GetLength() == 0 ) return true;
else return false;
}
void Clear()
{
m_Data.Clear();
}
void Push(const T & v)
{
m_Data.PushBack(v);
}
bool Pop() //弹出一个元素,这个元素将被抛弃
{
return m_Data.PopBack();
}
bool Pop(T & v) //弹出一个元素,并通过引用返回
{
return m_Data.PopBack(v);
}
const T & Top() const
{
if( Empty() ) throw XExceptionIsEmpty("XStack<T>");
return m_Data[m_Data.GetLength()-1];
}
//operator
const T & operator[](int Index) const //根据下标取值
{
return m_Data[Index];
}
XStack<T> & operator=(const XStack<T> &aStack )
{
if( this != &aStack )
{
m_Data = aStack.m_Data;
}
return *this;
}
//压入一个数据
XStack<T> & operator<<(const T & v)
{
m_Data.PushBack(v);
return *this;
}
//弹出一个数据
XStack<T> & operator>>(T & v)
{
if( !m_Data.PopBack(v) ) throw XExceptionIsEmpty("XStack<T>");
return *this;
}
int GetLength() const
{
return m_Data.GetLength();
}
//property
__property int Length = { read = GetLength };
private:
XDynamicArray<T> m_Data;
};
//模板类代码
//------------------------------------------------------------------------------
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XStack<T>
[Title]构造函数
////////////////////////////////////////////////////////////////////////////////
[param]
<int default = 0>size 初始化栈的容量
[Description]
构造函数
[Version]1.0
[Author]Rex Winter
[Date]2005-1-9
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
XStack<T>::XStack(int iPrepareLength)
:m_Data(0,iPrepareLength)
{}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XStack<T>
[Title]析构函数
////////////////////////////////////////////////////////////////////////////////
[Description]
析构函数
[Version]1.0
[Author]Rex Winter
[Date]2005-1-9
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
XStack<T>::~XStack()
{
Clear();
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -