使用类模板,可以事先不确定成员变量的类型,假如我们要写一个先进后出的栈,这个栈既可以放入int,也可以放入long,还可以放入string,那么就需要使用模板技术,否则,类的成员变量将难以定义,因为,你事先不清楚放入栈中的是什么。
直接上代码
template <class T> class Stack
{
private:
T *ele; // 元素数组
int iCount; // 元素的个数
int iMaxCount; // 容量
public:
Stack(int size);
~Stack();
// 判断是否为空
bool IsEmpty()
{
return iCount==0?true:false;
}
// 判断是否已经满了
bool IsFull()
{
return iCount==iMaxCount?true:false;
}
// 返回元素个数
int Size();
// 压栈
bool Push(const T& t);
// 出栈
bool Pop();
// 返回栈顶元素
T Top();
};
template <class T>
Stack<T>::Stack(int size)
{
ele = new T[size];
iCount = 0;
iMaxCount = size;
}
template <class T>
Stack<T>::~Stack()
{
delete ele;
}
template <class T>
bool Stack<T>::Push(const T& t)
{
if(IsFull())
{
return false;
}
ele[iCount++] = t;
return true;
}
template <class T>
bool Stack<T>::Pop()
{
if(IsEmpty())
{
return false;
}
iCount--;
return true;
}
template <class T>
T Stack<T>::Top()
{
if (iCount <= 0) {
throw std::out_of_range("Stack<>::top(): empty stack");
}
return ele[iCount-1];
}
template <class T>
int Stack<T>::Size()
{
return iCount;
}
int main()
{
Stack<int> stack(5);
stack.Push(1);
stack.Push(2);
int top = stack.Top();
stack.Pop();
cout<<stack.Size()<<endl;
return 1;
}
在使用时,
Stack<int> stack(5); 该语句决定了内部存储int类型的数据,且数组大小为5
如果你想存储long,那么就这么写 <pre name="code" class="cpp">Stack<long> stack(5);