/*
* Sequence adapters
*
* Stack
*
*/
template <class T, class C = deque<T> > class std::stack {
protected:
C c;
public:
typedef typename C::value_type value_type;
typedef typename C::size_type size_type;
typedef C container_type;
explicit stack(const C& a = C()) : c(a) { }
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
value_type& top() { return c.back(); }
const value_type& top() const { return c.back(); }
void push(const value_type& x) { c.push_back(x); }
void pop() { c.pop_back(); }
};
/*
* Usage of stack
*
*/
stack<char> s1; // uses a deque<char> to store elements of type char
stack< int,vector<int> > s2; // uses a vector<int> to store elements of type int