diff --git a/TinySTL/Stack.h b/TinySTL/Stack.h index 560756a..d77a8b2 100644 --- a/TinySTL/Stack.h +++ b/TinySTL/Stack.h @@ -1,11 +1,72 @@ #ifndef _STACK_H_ #define _STACK_H_ -#include "Deque.h" +#include "Vector.h" namespace TinySTL{ //class of stack - template> - class stack{}; + template> + class stack{ + public: + typedef typename Container::value_type value_type; + typedef typename Container::reference reference; + typedef typename Container::size_type size_type; + typedef Container container_type; + private: + container_type container_; + public: + explicit stack(const container_type& ctnr = container_type()) :container_(ctnr){} + + bool empty() const{ return container_.empty(); } + size_type size() const{ return container_.size(); } + value_type& top(){ return (container_.back()); } + const value_type& top() const{ return (container_.back()); } + void push(const value_type& val){ container_.push_back(val); } + void pop(){ container_.pop_back(); } + void swap(stack& x){ TinySTL::swap(container_, x.container_); } + public: + template + friend bool operator== (const stack& lhs, const stack& rhs); + template + friend bool operator!= (const stack& lhs, const stack& rhs); + template + friend bool operator< (const stack& lhs, const stack& rhs); + template + friend bool operator<= (const stack& lhs, const stack& rhs); + template + friend bool operator> (const stack& lhs, const stack& rhs); + template + friend bool operator>= (const stack& lhs, const stack& rhs); + template + friend void swap(stack& x, stack& y); + }; + template + bool operator== (const stack& lhs, const stack& rhs){ + return lhs.container_ == rhs.container_; + } + template + bool operator!= (const stack& lhs, const stack& rhs){ + return lhs.container_ != rhs.container_; + } + template + bool operator< (const stack& lhs, const stack& rhs){ + return lhs.container_ < rhs.container_; + } + template + bool operator<= (const stack& lhs, const stack& rhs){ + return lhs.container_ <= rhs.container_; + } + template + bool operator>(const stack& lhs, const stack& rhs){ + return lhs.container_ > rhs.container_; + } + template + bool operator>= (const stack& lhs, const stack& rhs){ + return lhs.container_ >= rhs.container_; + } + template + void swap(stack& x, stack& y){ + x.swap(y); + } } #endif \ No newline at end of file