/*
题目:
定义一个含max函数的队列类,并实现pop_front()、push_back()、max()函数。
*/
#include<iostream>
#include<cstdlib>
#include<stack>
#include<string>
#include<vector>
#include<deque>
using namespace std;
template<typename T>class QueueWithMax{
public:
void pop_front(){
if(myQueue.empty()) throw("queue is empty");
if(myQueue.front().index == queueMax.front().index){
queueMax.pop_front();
}
myQueue.pop_front();
}
void push_back(T number){
while(!queueMax.empty() && myQueue.back().number <= number){
queueMax.pop_back();
}
InternalData interalData = {number,index};
myQueue.push_back(interalData);
queueMax.push_back(interalData);
index++;
}
T max() const{
if(queueMax.empty()) throw ("queue is empty");
return queueMax.back().number;
}
private:
struct InternalData{
T number;
int index;
};
deque<InternalData> myQueue;
deque<InternalData> queueMax;
int index;
};
int main()
{
QueueWithMax<int> queue;
queue.push_back(5);
queue.push_back(3);
queue.pop_front();
cout<<queue.max();
}
原文:https://www.cnblogs.com/buaaZhhx/p/12115106.html