template<class T, class Con = deque<T>> class Stack { public: Stack(){ ; } void push(const T& x){ _c.push_back(x); } void pop(){ if (_c.empty() != 1) _c.pop_back(); } T& top(); const T& top()const{ return _c.back(); } size_t size()const{ return _c.size(); } bool empty()const{ return _c.empty(); } private: Con _c; };
template<class T, class Con = deque<T>> class Queue { public: Queue(){ ; } void push(const T& x){ _c.push_back(x); } void pop(){ if (_c.empty() != 1) _c.pop_front(); } T& back(){ return _c.back(); } const T& back()const{ return _c.back(); } T& front(){ return _c.front(); } const T& front()const{ return _c.front(); } size_t size()const{ return _c.size(); } bool empty()const{ return _c.empty(); } private: Con _c; };
template <class T, class Sequence = vector<T>, class Compare = less<T> > class Priority_queue { public: Priority_queue(){ ; } //用迭代器构造 template <class InputIterator> Priority_queue(InputIterator first, InputIterator last){ c(first, last); //堆排序 make_heap(c.begin(), c.end(), comp); } bool empty() const{ return c.empty(); } size_t size() const{ return c.size(); } T& top() const{ if (c.empty() != 1) return c.front();//返回队头元素 } void push(const T& x){ c.push_back(x); //插入以后排序 push_heap(c.begin(), c.end(), comp); } void pop(){ pop_heap(c.begin(), c.end(), comp); c.pop_back(); } private: Sequence c; Compare comp; };