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;
};