实现一种猫狗队列-要求如下:程序员面试指南-左程云,page:10
#include <iostream>
#include <stack>
#include <vector>
#include <queue>
#include <string>
using namespace std;
class Pet{
public:
Pet();
Pet(string str){type= str;}
string getPetType(){return type;}
private:
string type;
};
class Dog : public Pet{
public:
Dog():Pet("dog"){}
};
class Cat : public Pet{
public:
Cat():Pet("cat"){}
};
class PetEnterQueue{
public:
PetEnterQueue(Pet pet_t,long co){
pet = pet_t;
number = co;
}
Pet getPet(){return pet;}
long getNumber(){return number;}
string getEnterPetType(){return pet.getPetType();}
private:
Pet pet;
long number;
};
class DogAndCatQue{
public:
DogAndCatQue(){
number = 0;
}
void add (Pet pet)
{
if(pet.getPetType().compare("dog") == 0)
dogQ.push(PetEnterQueue(pet,number++));
else if(pet.getPetType().compare("cat") == 0)
catQ.push(PetEnterQueue(pet,number++));
else
cout << "pet not dog and cat!\n"<<endl;
}
Pet pollAll()
{
if(!dogQ.empty() && catQ.empty())
{
if(dogQ.front().getNumber() < catQ.front().getNumber())
dogQ.pop();
else
catQ.pop();
}
else if(dogQ.empty()){catQ.pop();}
else if(catQ.empty()){dogQ.pop();}
else cout << "queue is empty!\n"<<endl;
}
void pollDog()
{
if(!dogQ.empty()) {dogQ.pop();}
else cout << "dog is empty!\n"<<endl;
}
void pollCat()
{
if(!catQ.empty()) {catQ.pop();}
else cout << "cat is empty!\n"<<endl;
}
string QueFront()
{
if(!dogQ.empty() && catQ.empty())
{
if(dogQ.front().getNumber() < catQ.front().getNumber())
return dogQ.front().getEnterPetType();
else
return catQ.front().getEnterPetType();
}
else if(dogQ.empty()){return catQ.front().getEnterPetType();}
else {return dogQ.front().getEnterPetType();}
}
bool isempty(){return (dogQ.empty() && catQ.empty());}
bool isDogQueEmpty(){return dogQ.empty(); }
bool isCatQueEmpty(){return catQ.empty(); }
private:
queue<PetEnterQueue> catQ,dogQ;
long number;
};