Реализация 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;
}