#include <vector>
#include <iostream>
template<typename T>
struct Stack
{
void push(T const& elem);
void pop();
T top() const;
bool empty() const
{
return elems.empty();
}
private:
std::vector<T> elems;
};
template<typename T>
void Stack<T>::push(T const& elem)
{
elems.emplace_back(elem);
}
template<typename T>
void Stack<T>::pop()
{
if (this->empty())
{
std::cout << "The stack is empty, can't do pop" << std::endl;
return ;
}
elems.pop_back();
}
template<typename T>
T Stack<T>::top() const
{
if (this->empty())
{
std::cout << "The stack is empty, can't do top" << std::endl;
return T();
}
return elems.back();
}
测试部分:
#include <iostream>
#include "stack.hpp"
using namespace std;
int main(int argc, char **argv)
{
Stack<int> st;
st.push(12);
st.push(14);
st.push(2);
cout << st.top() << " " << st.empty() << endl;
st.pop();
cout << st.top() << " " << st.empty() << endl;
st.pop();
cout << st.top() << " " << st.empty() << endl;
st.pop();
cout << st.top() << " " << st.empty() << endl;
st.pop();
return 0;
}
输出结果:
2 0
14 0
12 0
The stack is empty, can't do top
0 1
The stack is empty, can't do pop