求助各位大佬!
代码:
#include<exception>
#include<iostream>
#include<cstdlib>
#include<string>
#include<deque>
using namespace std;
string action;
int temp;
class round_que_exception:public exception{
public:
string reason;
explicit round_que_exception(string&& _reason):reason(_reason){}
const char* what(){
return reason.c_str();
}
};
template<typename Tp,typename Sequence=deque<Tp>>
class round_queue{
public:
typedef Tp value_type;
private:
Sequence data;
public:
round_queue()=default;
explicit round_queue(string& init_action,Sequence& init_data){
for(int i=0;i<init_action.size();++i){
try{
if(init_action.at(i)=='A')
push(init_data.front(),i+1);
else if(init_action.at(i)=='B')
pop(i+1);
init_data.pop_front();
}
catch(round_que_exception rqe){
cerr<<rqe.what()<<endl;
exit(0);
}
}
}
~round_queue(){data.clear();}
void push(const value_type& value,int step){
if(data.size()==4)throw round_que_exception("Queue is full!\n"+to_string(step)+" step is error!\n"+to_string(data.front())+" "+to_string(data.back()));
data.push_back(value);
}
void pop(int step){
if(data.size()==0)throw round_que_exception("Queue is empty!\n"+to_string(step)+" step is error!");
data.erase(data.begin());
}
bool empty(){
return (data.size()==0);
}
const value_type& front(){
return data.front();
}
const value_type& back(){
return data.back();
}
Sequence& data_self(){
return data;
}
};
deque<int>buffer;
int main(){
cin>>action;
while(cin>>temp)buffer.push_back(temp);
round_queue<int>que(action,buffer);
/*for(auto i:que.data_self())
cout<<i<<' ';
cout<<endl;*/
if(que.empty())
cout<<"Queue is empty!"<<endl;
else
cout<<que.front()<<' '<<que.back()<<endl;
return 0;
}