#include template > class stack { friend bool operator== (const stack&, const stack&); friend bool operator< (const stack&, const stack&); public: typedef typename Sequence::value_type value_type; typedef typename Sequence::size_type size_type; typedef Sequence container_type; typedef typename Sequence::reference reference; typedef typename Sequence::const_reference const_reference; protected: Sequence seq; public: stack() : seq() {} explicit stack(const Sequence& s0) : seq(s0) {} bool empty() const { return seq.empty(); } size_type size() const { return seq.size(); } reference top() { return seq.back(); } const_reference top() const { return seq.back(); } void push(const value_type& x) { seq.push_back(x); } void pop() { seq.pop_back(); } }; template bool operator==(const stack& x, const stack& y) { return x.seq == y.seq; } template bool operator<(const stack& x, const stack& y) { return x.seq < y.seq; } template bool operator!=(const stack& x, const stack& y) { return !(x == y); } template bool operator>(const stack& x, const stack& y) { return y < x; } template bool operator<=(const stack& x, const stack& y) { return !(y < x); } template bool operator>=(const stack& x, const stack& y) { return !(x < y); }