65,186
社区成员




/*
header:stack.h
note:栈
*/
#ifndef STACK_H_
#define STACK_H_
#include <vector>
#include <stdexcept>
namespace easy_kit
{
template <typename T>
class stack
{
private:
std::vector<T> elems;
public:
stack();
stack(stack<T> const&);
stack<T> & operator =(stack<T> const&);
public:
void push(T const &e);
void pop();
T top() const;
inline bool empty() const
{
return elems.empty();
}
inline T size() const
{
return elems.size();
}
};
template <typename T>
stack<T>::stack()
{
}
template <typename T>
stack<T>::stack(stack<T> const &e)
{
elems = e.elems;//这里直接用vector的拷贝构造
}
template <typename T>
stack<T> & stack<T>::operator = (stack<T> const &e)
{
if(static_cast<void*>(this)==static_cast<void*>&e)
return *this;
elems.clear();
elems = e.elems;
return *this;
}
template <typename T>
void stack<T>::push(T const &e)
{
elems.push_back(e);
}
template <typename T>
void stack<T>::pop()
{
if(stack::empty())
{
throw std::out_of_range("stack<>::pop is empty!");
}
elems.pop_back();
}
template <typename T>
T stack<T>::top() const
{
if(stack::empty())
{
throw std::out_of_range("stack<>::pop is empty!");
}
return elems.back();//返回最后一个元素的拷贝
}
}//end namespace easy kit
#endif