题目:《EPI》P72
亮点在于维护了一个双端队列,使得查找最大值的时间复杂度为O(1)。
template<class T> class Queue
{
queue<T> q;
deque<T> d;
public:
T dequeue();
void enqueue(const T &elem);
T mymax();
};
template<class T> void Queue<T>::enqueue(const T &elem)//注意是Queue<T>,不要忘了<T>
{
q.push(elem);
if (d.empty() || d.back() >= elem)
d.push_back(elem);
else
{
while (!d.empty() && d.back() < elem)
d.pop_back();
d.push_back(elem);
}
}
template<class T> T Queue<T>::dequeue()
{
T res;
if (q.empty())
{
throw length_error("queue is empty!");
}
res = q.front();
q.pop();
if (res == d.front())
d.pop_front();
return res;
}
template<class T> T Queue<T>::mymax()
{
T res;
if (d.empty())
{
throw length_error("queue is empty!");
}
return d.front();
}