Реализация QUEUE

Буду очень признателен в помощи реализации очереди к следующему коду:

#include <iostream>
#include <string>
#include <list>
 
struct Pacient
{
    std::string diagnoz;
    std::string FIO;
    int year;
};
 
typedef std::list<Pacient> PacientList;
typedef std::list<Pacient>::iterator IterPacientList;
typedef std::list<Pacient>::const_iterator ConstIterPacientList;
 
void Print(const PacientList& List)
{
        std::cout<<"\n"<<"============================="<<"\n";
 
        for(ConstIterPacientList iPacient = List.begin(); iPacient != List.end(); ++iPacient)
        {
            std::cout << "FIO -> ";
            std::cout << iPacient->FIO << std::endl;
            std::cout << "got ro}I{denia -> ";
            std::cout << iPacient->year << std::endl;
            std::cout << "Vozrast -> ";
            std::cout <<  2021 - iPacient->year  << std::endl;
            std::cout << "diagnoz -> ";
            std::cout << iPacient->diagnoz << std::endl;
 
            std::cout<<"-----------------------------"<<"\n";
        }
 
        std::cout<<"============================="<<"\n";
}
 
 
char MainMenu()
{
    system("cls");
 
    std::cout << "Menu:"  << std::endl;
    std::cout << "\t 1. Add info to list (to head )" << std::endl;
    std::cout << "\t 2. Add info to list (to end)" << std::endl;
    std::cout << "\t 3. Add info in list with some position" << std::endl;
    std::cout << "\t 4. Delete info  (for elements numbers)" << std::endl;
    std::cout << "\t 5. Delete all info (Cleaning list)" << std::endl;
    std::cout << "\t 6. Print list" << std::endl;
    std::cout << "Vvedite nomer deistvia i najmite <Enter>: ";
    char item = 0;
    std::cin >> item;
 
    return item;
}
 
Pacient DataInput()// ???? ??????
{
        Pacient Pacient;
        std::cout << "Dannie o Paciente: " << std::endl;
        std::cout << "FIO : ";
        std::cin.ignore();
        std::getline(std::cin, Pacient.FIO);
        std::cout << "got ro}I{denia : ";
        std::cin >> Pacient.year;
        std::cout << "diagnoz: ";
        std::cin.ignore();
        std::getline(std::cin, Pacient.diagnoz);
        return Pacient;
}
 
int main()
{
        size_t n = 0;
        PacientList PacientList;
 
        char answer = 'y';
        while(answer == 'y')
        {
            switch ( MainMenu() )
            {
                case '1':
                    PacientList.push_front( DataInput() );
                    break;
 
                case '2':
                    PacientList.push_back( DataInput() );
                    break;
 
                case '3':
                    std::cout << "Vvedite nomer pozicii dlia vstavki: ";
                    std::cin >> n;
                    if( n >= PacientList.size() )
                    {
                        std::cout << "V spiske net zapisi pod nomerom " << n << std::endl;
                    }
                    else
                    {
                        IterPacientList iterPacient = PacientList.begin();
                        std::advance(iterPacient, n);
                        PacientList.insert( iterPacient, DataInput() );
                    }
                    break;
 
                case '4':
                    std::cout << "Vvedite nomer pozicii dlia udalenia: ";
                    std::cin >> n;
 
                    if( n >= PacientList.size() )
                    {
                        std::cout << "V spiske net zapisi pod nomerom " << n << std::endl;
                    }
                    else
                    {
                        IterPacientList iterPacient = PacientList.begin();
                        std::advance(iterPacient, n);
                        PacientList.erase(iterPacient);
                    }
                    break;
 
                case '5':
                    PacientList.clear();
                    break;
 
                case '6':
                    Print(PacientList);
                    break;
 
                default:
                    std::cout << "Takogo punkta menu ne sushestvuet." << std::endl;
                    break;
            }
            std::cout << "Continue?(input 'y' to continue or any other key to quit) ";
            std::cin >> answer;
        }
 
        std::cout << "\n Thats all!!!\n\n";
 
        return 0;
}

Ответы (1 шт):

Автор решения: AR Hovsepyan

Очень много лишнего у вас и слишком большое внимание на консольные вводы и выводы. Если не более полезный код писать, а просто немного убрать лишнюю писанину, то с очередью получится так:

using  PacientQueue = std::queue< Pacient>;
void Print(const PacientQueue& List)
{
    PacientQueue t(List);
    const Pacient pt = t.front();
    std::cout << "\n" << "=============================" << "\n";

    while (!t.empty())
    {
       std::cout << "FIO -> " << pt.FIO
           << "\ngot ro}I{denia -> " << pt.year
           << "\nVozrast -> " << 2021 - pt.year
           << "\ndiagnoz -> " << pt.diagnoz
           << "\n-----------------------------\n";       
    }   
}
char MainMenu()
{  

    std::cout << "Menu:\n\t 1. Add info to list (to head )\n"
        << "\t 2. Add info to list (to end)\n"
        << "\t 3. Add info in list with some position\n"
        << "\t 4. Delete info  (for elements numbers)\n"
        << "\t 5. Delete all info (Cleaning list)\n"
        << "\t 6. Print list\n"
        << "Vvedite nomer deistvia i najmite <Enter>: ";

    return std::cin.get(); 
}

Pacient DataInput()// ???? ??????
{
    Pacient P;
    std::cout << "Dannie o Paciente:\n FIO : \n" ;   
    std::getline(std::cin, P.FIO);
    std::cout << "got ro}I{denia : ";
    std::cin >> P.year;
    std::cout << "diagnoz: ";   
    std::getline(std::cin, P.diagnoz);
    return P;
}

int main()
{
    size_t n = 0;
    PacientQueue  PacientList;
    
    while (true)
    {
        char c = MainMenu();
        if (c == 'y') break;
        switch (c)
        {
        case '1': case '2':
            PacientList.push(DataInput());
            break;        

        case '3':
            std::cout << "Vvedite nomer pozicii dlia vstavki: ";
            std::cin >> n;
            if (n >= PacientList.size())
            {
                std::cout << "V spiske net zapisi pod nomerom " << n << std::endl;
                
            }
            else
            {
                PacientQueue t(PacientList), t1;
                while (n--) {
                    t1.push(t.front());
                    t.pop();
                }
                t1.push(DataInput());
                while (!t.empty()) {
                    t1.push(t.front());
                    t.pop();
                } 
                PacientList = t1;
            }
            break;

        //остальное напишите сами
        
    }
    return 0;
}
→ Ссылка