题目要求:

请设计一个排队程序,用户有普通客人和 VIP 客人之分,VIP 客人不排队(即 VIP 客人在队列头部),请将已有的guest1和guest2放入队列中(guest1排在guest2前),并将VIP客人新增至队列头部

解题思路:

题目代码中给出了把Guest加入到了deque双端队列,我们可以把vip客户通过push_front插入到头部,其他客户则通过push_back插入到尾部

作为练习,我们可以散发下思维,可以写一个通过客户填写的信息来判断是不是vip客户,如果是vip客户我们自动放到普通客户前面,这时候我们可以建立两个双端队列,一个保存vip客户,一个保存普通客户,来达到排队效果,有兴趣的可以看一下最后的代码。有什么意见也可以一起交流

#include <iostream>
#include <deque>
using namespace std;

class Guest {
public:
    string name;
    bool vip;
    Guest(string name, bool vip) {
        this->name = name;
        this->vip = vip;
    }
};
int main() {
    Guest guest1("张三", false);
    Guest guest2("李四", false);
    Guest vipGuest("王五", true);
    deque<Guest> deque;
    // write your code here......
    deque.push_front(vipGuest);
    deque.push_back(guest1);
    deque.push_back(guest2);
    for (Guest g : deque) {
        cout << g.name << " ";
    }
    return 0;
}
#include <iostream>
#include <string>
#include <deque>
using namespace std;
class Customer //创建Customer类
{
public:
string name;
bool vip;
Customer (string name,bool vip):name(name),vip(vip){}
};
int main()
{
deque<Customer> vipQueue;  //设置VIP客户队列
deque<Customer> Queue;  //设置普通客户队列
string name;
bool vip;
char input;  //input字符用来判断后面是不是vip客户用
cout <<"请输入客户姓名输入\"done\"结束输入:"<<endl;
while(cin >> name && name != "done")  //创建while循环,循环输入客户,知道输入done结束
{
cout <<"该客户是否为VIP(y/n):"<<endl;
cin >> input;
switch (input) {  //用switch选择语句来判断是不是vip客户
case 'y':
case 'Y':
vipQueue.push_back(Customer(name,true));  //如果是vip客户加入到vip队列中
break;
case 'n':
case 'N':
Queue.push_back(Customer(name,false));  //如果不是加入到普通队列中
break;
default:
cout <<"输入错误,请重新填写"<<endl;
}
cout <<"请输入客户姓名输入\"done\"结束输入:"<<endl;
}
while (!vipQueue.empty())  //创建一个vip客户的while循环,列表空后结束
{
Customer currentCustomer = vipQueue.front();//声明currentCustomer的Customer变量,从vipQueue队首获取数据
vipQueue.pop_front();  //在currentCutomer获取元素后,从vipQueue移除队首元素
cout << currentCustomer.name<<" "; //输出currentCutomer的name字段
}
while (!Queue.empty())  //创建一个普通客户的while循环,列表空后结束
{
Customer currentCustomer = Queue.front();
Queue.pop_front();
cout << currentCustomer.name << " ";
}
}