diff --git a/TinySTL/Queue.h b/TinySTL/Queue.h index 52a9b5c..0ea6333 100644 --- a/TinySTL/Queue.h +++ b/TinySTL/Queue.h @@ -7,8 +7,49 @@ namespace TinySTL{ //class of queue - template> - class queue{}; + template> + class queue{ + public: + typedef T value_type; + typedef Container container_type; + typedef typename Container::reference reference; + typedef typename Container::const_reference const_reference; + typedef typename Container::size_type size_type; + private: + Container container_; + public: + queue(){} + explicit queue(const container_type& ctnr) :container_(ctnr){} + + bool empty() const{ return container_.empty(); } + size_type size() const{ return container_.size(); } + reference& front(){ return container_.front(); } + const_reference& front() const{ return container_.front(); } + reference& back(){ return container_.back(); } + const_reference& back() const{ return container_.back(); } + void push(const value_type& val){ container_.push_back(val); } + void pop(){ container_.pop_front(); } + void swap(queue& x){ container_.swap(x.container_); } + public: + template + friend bool operator== (const queue& lhs, const queue& rhs); + template + friend bool operator!= (const queue& lhs, const queue& rhs); + template + friend void swap(queue& x, queue& y); + }; + template + bool operator== (const queue& lhs, const queue& rhs){ + return lhs.container_ == rhs.container_; + } + template + bool operator!= (const queue& lhs, const queue& rhs){ + return lhs.container_ != rhs.container_; + } + template + void swap(queue& x, queue& y){ + TinySTL::swap(x.container_, y.container_); + } //class of priority_queue template , class Compare = TinySTL::less>