站外题求助
  • 板块灌水区
  • 楼主cygnus_beta
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/11/13 12:18
  • 上次更新2023/11/4 00:44:00
查看原帖
站外题求助
452531
cygnus_beta楼主2021/11/13 12:18

求助各位大佬!

链接

代码:

#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;
}
2021/11/13 12:18
加载中...