猫狗队列

功能要求:

  • 用户可以调用push方法将cat类或dog类的实例放入队列中;
  • 用户可以调用pollAll方法,将队列中所有的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用pollDog方法,将队列中dog类的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用pollCat方法,将队列中cat类的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用isEmpty方法,检查队列中是否还有dog或cat的实例;
  • 用户可以调用isDogEmpty方法,检查队列中是否有dog类的实例;
  • 用户可以调用isCatEmpty方法,检查队列中是否有cat类的实例。

 

Pet.h

#ifndef _PET_H
#define _PET_H
#include <string>
using namespace std;

class Pet{
private:
    string type;

public:
    Pet(){}
    Pet(string type){
        this->type = type;
    }
    string getPetType(){
        return type;
    }
};

class Dog :public Pet{
public:
    Dog() :Pet("dog") {}
};

class Cat :public Pet{
public:
    Cat() :Pet("cat") {}
};

#endif

PetEnterQueue.h

#ifndef _PETENTERQUEUE_H
#define _PETENTERQUEUE_H
#include "Pet.h"
using namespace std;

class PetEnterQueue {
private:
    Pet pet;
    long count
        ;
public:
    PetEnterQueue(Pet pet, long count) {
        this->pet = pet;
        this->count = count;
    }

    Pet getPet() {
        return this->pet;
    }

    long getCount() {
        return this->count;
    }

    string getEnterPetType() {
        return this->pet.getPetType();
    }
};
#endif

CatDogQueue.h

#ifndef _CATDOGQUEUE_H
#define _CATDOGQUEUE_H
#include"PetEnterQueue.h"
#include"Pet.h"
#include<iostream>
#include<queue>
using namespace std;

class CatDogQueue {
private:
    queue<PetEnterQueue> dogQ;
    queue<PetEnterQueue> catQ;
    long count;

public:
    void push(Pet pet){
        if (pet.getPetType() == "dog") {
            this->dogQ.push(PetEnterQueue(pet, count++));
        }
        else if(pet.getPetType()=="cat"){
            this->catQ.push(PetEnterQueue(pet, count++));
        }
    }

    Pet popAll() {
        if (!catQ.empty() && !dogQ.empty()){
            if (dogQ.front().getCount() < catQ.front().getCount()){
                Pet tmp = dogQ.front().getPet();
                dogQ.pop();
                return tmp;
            }
            else{
                Pet tmp = catQ.front().getPet();
                catQ.pop();
                return tmp;
            }
        }
        else if (!catQ.empty()){
            Pet tmp = catQ.front().getPet();
            catQ.pop();
            return tmp;
        }
        else if (!dogQ.empty()){
            Pet tmp = dogQ.front().getPet();
            dogQ.pop();
            return tmp;
        }
        else{
            throw runtime_error("Error empty queue.");
        }
    }

    Dog popDog(){
        if (!dogQ.empty()){
            Pet tmpP = dogQ.front().getPet();
            Dog tmpD;
            Pet* pd = &tmpD;
            *pd = tmpP;
            dogQ.pop();
            return tmpD;
        }
        else{
            throw runtime_error("Error empty dog queue.");
        }
    }

    Cat popCat(){
        if (!catQ.empty()){
            Pet tmpP = catQ.front().getPet();
            Cat tmpC;
            Pet* pc = &tmpC;
            *pc = tmpP;
            catQ.pop();
            return tmpC;
        }
        else{
            throw runtime_error("Error empty cat queue.");
        }
    }


    bool isEmpty(){
        return dogQ.empty() && catQ.empty();
    }

    bool isDogEmpty(){
        return dogQ.empty();
    }

    bool isCatEmpty(){
        return catQ.empty();
    }
};

#endif

test.cpp

#include <iostream>
#include "CatDogQueue.h"

using namespace std;
int main()
{
    CatDogQueue test;
    if (test.isEmpty())
        cout << "All queue is empty!" << endl;
    test.push(Dog());
    if (!test.isEmpty())
        cout << "All queue is not empty!" << endl;
    if (!test.isDogEmpty())
        cout << "Dog queue is not empty!" << endl;
    if (test.isCatEmpty())
        cout << "Cat queue is Empty!" << endl;
    for (int i = 0; i < 2; i++)
    {
        test.push(Cat());
        test.push(Dog());
    }
    cout << "popAll:" << test.popAll().getPetType() << endl;
    cout << "popDog:" << test.popDog().getPetType() << endl;
    cout << "popCat:" << test.popCat().getPetType() << endl;
    cout << "popAll:" << test.popAll().getPetType() << endl;
    cout << "popAll:" << test.popAll().getPetType() << endl;
    if (test.isEmpty())
        cout << "All queue is empty!" << endl;

    return 0;

 

转载于:https://www.cnblogs.com/MuZiShiYe/p/11255490.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值