#include <iostream>
#include <string>
#include <vector>
using namespace std;
//定义一个模板类
template <typename T>
class Stack{
public:
Stack(){}; //构造函数
~Stack(){};
bool isEmpty() const; //判断堆栈是否为空
T top(); //返回栈顶元素
void push(T value); //往堆栈尾部中添加元素
void pop(); //删除最后一个元素
int getSize() const; //获取数据长度
void printStack() const; //打印堆栈
private:
vector<T> c; //保存数据
};
//模板类实现
template<typename T>
bool Stack<T>::isEmpty() const{
return c.empty();
}
template<typename T>
T Stack<T>::top(){
if(!isEmpty())
return c.back();
else{
cout << "Stack is empty." << endl;
return 0;
}
}
template<typename T>
void Stack<T>::push(T value){
c.push_back(value);
}
template<typename T>
void Stack<T>::pop(){
if(!isEmpty())
c.pop_back();
}
template<typename T>
int Stack<T>::getSize() const{
return c.size();
}
template<typename T>
void Stack<T>::printStack() const{
if(!isEmpty()){
for(auto &i : c)
cout << i << " ";
cout << endl;
}
}
int main(){
//Create a stack of int values
Stack<int> intStack;
for(int i = 0; i < 100; i++)
intStack.push(i);
intStack.pop();
intStack.printStack();
//Create a stack of strings
Stack<string> stringStack;
stringStack.push("Chicago");
stringStack.push("Denver");
stringStack.push("London");
stringStack.push("California");
cout << stringStack.top() << endl;
stringStack.printStack();
return 0;
}
用vector主要原因的不用自己限定堆栈大小,vector可以自由增长。