Міністерство науки і освіти України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
кафедра програмного забезпечення
Звіт з лабораторної роботи №9
з дисципліни “Об’єктно-орієнтоване програмування ”
Лабораторна робота 9
Стандартна бібліотека шаблонів. Контейнери та алгоритми.
ЗАВДАННЯ
Написати програму з використанням STL. Програма повинна демонструвати роботу з контейнерами STL і використання алгоритмів STL:
Використовуючи необхідний алгоритм, знайти в контейнері елемент, який задовільняє заданій умові .
11
multimap
list
Корабель(ім’я, вантажопідйомність, тип)
Текст програми
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <map>
#include <list>
#include <algorithm>
using namespace std;
typedef struct _pair
{
char Type[20];
int freight;
}Characters;
typedef struct
{
char Ship[25];
Characters ch1;
} LArgument;
char up,down;
//---------------------------------------------------------------------------
#pragma argsused
bool IsInRange (multimap <string, Characters>::iterator it)
{
return (it->first[0] >= up && it->first[0] <= down);
}
//-------------------------------------------------------
bool IsInRange (list <LArgument>::iterator Lit)
{
return (Lit->Ship[0] >= up && Lit->Ship[0] <= down);
}
//-------------------------------------------------------
bool LASort (LArgument L1, LArgument L2)
{
return (strcmp(L1.Ship,L2.Ship));
}
//-------------------------------------------------------
int main()
{
multimap <string, Characters> ship1, ship2;
multimap <string, Characters>::iterator it,it2;
multimap <string, Characters>::reverse_iterator rit;
int cnt1,cnt2,i;
char ship[25];
Characters temp;
//zav 1
//zapovnuemo kartu
cout << "Vveditj k-tj zapusiv: ";
cin >> cnt1;
cin.get();
for(i=0; i<cnt1; i++)
{
cout << i+1 << " - yj zapys:" << endl;
cout << "Vveditj nazvu korablya : ";
cin.getline(ship,25);
cout << "Vveditj typ : ";
cin.getline(temp.Type,20);
cout << "Vveditj vantazhopidjomnist' (v tonnah): ";
cin >> temp.freight;
cin.get();
ship1.insert(multimap<string,Characters>::value_type( string(ship), temp));
}
//zav 2
//vuvodumo kartu
cout << "\n\nVuvodumo vmist multykartu : " << endl << endl;
for (it=ship1.begin(); it!=ship1.end(); it++)
{
cout << it->first << " - " << it->second.Type;
cout <<"; V: " << it->second.freight << " tonn" <<endl;
}
//zav 3
//zmina elementiv kartu
char ansver;
char key[25];
cout << "\nVydalennya elementiv.\n";
cout << "Vykonaty? (y/n)";
cin >> ansver;
cin.get();
if(ansver=='y')
{
do
{
cout << "Vvedit' nazvu korablya, zapys\n";
cout << "yakogo maye buty vydalenyj:\n";
cin.getline(key,25);
if((it=ship1.find(key)) == ship1.end())
cout << "V nas takyh korabliv nemaye:)!\n";
else
{
ship1.erase(it);
cout << "Dani pro korabel vydaleni zi spysku...\n\n";
}
if(ship1.empty())
{
cout << "\nZapysiv nemaye!!!\n" << endl;
break;
}
cout << "Prodovzhyty vydalennya? (y/n) : ";
cin >> ansver;
cin.get();
}
while(ansver=='y');
}
cout << "\n\nZamina elementiv.\n";
cout << "Vykonaty zaminu zapysu?\n";
cin >> ansver;
cin.get();
if(ansver=='y')
{
do
{
cout << "Vveditj nazvu korablya, zapys\n";
cout << "yakogo bazhayete zaminyty:\n";
cin.getline(key,25);
if((it=ship1.find(key)) == ship1.end())
cout << "V nas takyh korabliv nemaye!!!\n";
else
{
cout << "Vveditj typ : ";
cin.getline(it->second.Type ,20);
cout << "Vveditj vantazhopidyomnist' (v tonnah): ";
cin >> it->second.freight;
cout << "\nZapys uspishno zaminenyj!\n";
}
if(ship1.empty())
{
cout << "Zapysiv nemaye!!!" << endl;
break;
}
cout << "\nProdovzhyty zaminu? (y/n) : ";
cin >> ansver;
cin.get();
}
while(ansver=='y');
}
//zav 4
//vuvodumo kartu za dopomogoyu iteratoriv
cout << "\n\nVyvedennya vmistu (za dop. iteratoriv): " << endl << endl;
for (it=ship1.begin(); it!=ship1.end(); it++)
{
cout << it->first << " - " << it->second.Type;
cout <<"; V: " << it->second.freight << "tonn" <<endl;
}
//zav 5
//stvorutu we odun konteyner takogo zh tupy i yogo zapovnutu
cout << "\nVveditj k-tj zapusiv drugogo kontejneru: ";
cin >> cnt2;
cin.get();
for(i=0; i<cnt2; i++)
{
cout << i+1 << " - yj zapys:" << endl;
cout << "Vveditj nazvu korablya : ";
cin.getline(ship,25);
cout << "Vveditj typ : ";
cin.getline(temp.Type,20);
cout << "Vveditj vantazhopidyomnist' (v tonnah) : ";
cin >> temp.freight;
cin.get();
ship2.insert(multimap<string,Characters>::value_type( string(ship), temp));
}
//zav 6
//vudalennya n elem pisla zadanogo ta dodavannya zapusiv
//z ship2 v ship
int n,index=0;
ansver='n';
do
{
ansver='n';
cout << "\nVveditj nazvu korablya dlya poshuku: ";
cin.getline(key,25);
if((it=ship1.find(key)) == ship1.end())
{
cout << "V nas takyh korabliv nemaye!!!\n";
cout << "Prodovzhyty poshuk? (y/n) : ";
cin >> ansver;
cin.get();
}
}
while(ansver=='y');
if (it!=ship1.end())
{
cout << "Skilky zapysiv pislya zadanogo treba vydalyty?\n";
cin >> n;
cin.get();
for(++it,index=0; it!=ship1.end() && index<n; it++,index++)
ship1.erase(it);
if(index<n)
cout << "\nKorabli skinchylys'!\n";
else
cout << "Vudaleno " << n << " elementiv...\n\n";
}
for(it2=ship2.begin(); it2!=ship2.end(); it2++)
{
ship1.insert(multimap<string,Characters>::value_type( string(it2->first), it2->second ));
}
cout << "Dodaemo zapysy z pershogo konteyneru v drugyy...\n";
//zav 7
//vuvestu dvi kartu
cout << "\n\nVuvodumo pershyj konteyner : " << endl << endl;
for (it=ship1.begin(); it!=ship1.end(); it++)
{
cout << it->first << " - " << it->second.Type;
cout << "; V: " << it->second.freight << "tonn" <<endl;
}
cout << "\n\nVuvodumo drugyj konteyner : " << endl << endl;
for (it2=ship2.begin(); it2!=ship2.end(); it2++)
{
cout << it2->first << " - " << it2->second.Type;
cout <<"; V: " << it2->second.freight<< "tonn" << endl;
}
//zav 8-9
//vuvodumo kartu v zvorotnjomy poryadky
cout << "\nNashi korabli v zvorotnyomu poryadku: " << endl << endl;
for (rit=ship1.rbegin(); rit!=ship1.rend(); rit++)
{
cout << rit->first << " - " << rit->second.Type;
cout <<"; V: " << rit->second.freight<< "tonn" << endl;
}
//zav 10&11
//znaytu zapusu yaki vidpovidayutj ymovi za dop algorutmiv
//i zapus ih y list
list<LArgument> MyList;
list<LArgument>::iterator Lit;
LArgument arg;
cout << "Vveditj verhnyu litery diapazony : ";
cin >> up;
cin.get();
cout << "\nVveditj nuzhnu litery diapazony : ";
cin >> down;
cin.get();
cout << "\nVyvedennya zapysiv, scho znah. v mezhah diapazonu:\n";
for (it=ship1.begin(); it!=ship1.end(); it++)
if (IsInRange(it))
{
cout << it->first << " - " << it->second.Type;
cout <<"; V: " << it->second.freight<< "tonn" << endl;
strcpy(arg.Ship,it->first.c_str());
arg.ch1=it->second;
MyList.push_front(arg);
}
//zav 12
//proglyanytu list
cout << "\n\nVyvadennya vmistu spusky : " << endl << endl;
for (Lit=MyList.begin() ; Lit!=MyList.end(); Lit++)
{
cout << Lit->Ship << " - " << Lit->ch1.Type;
cout <<"; V: " << Lit->ch1.freight<< "tonn" << endl;
}
//zav 13
//posortyvatu list po zrostannyu
MyList.sort(LASort);
cout << "Sortuvannya vmistu multykartu i spusky po zrostannyu...\n";
//zav 14
//vuvestu map & list
cout << "\nVuvodennya vmistu karty : " << endl << endl;
for (it=ship1.begin(); it!=ship1.end(); it++)
{
cout << it->first << " - " << it->second.Type;
cout <<"; V: " << it->second.freight<< "tonn" << endl;
}
cout << "\n\nVyvedennya vmistu spysku : " << endl << endl;
for (Lit=MyList.begin() ; Lit!=MyList.end(); Lit++)
{
cout << Lit->Ship << " - " << Lit->ch1.Type;
cout <<"; V: " << Lit->ch1.freight<< "tonn" << endl;
}
//zav 15
//otrumatu we odun list
list<LArgument> MyList2;
cout << "\nZlyttya multykapty i spysku v drugyy spysok...\n" ;
for (it=ship1.begin(); it!=ship1.end(); it++)
{
strcpy(arg.Ship,it->first.c_str());
arg.ch1=it->second;
MyList2.push_front(arg);
}
for (Lit=MyList.begin(); Lit!=MyList.end(); Lit++)
{
strcpy(arg.Ship,Lit->Ship);
arg.ch1=Lit->ch1;
MyList2.push_front(arg);
}
//zav 16
//vuvestu list 2
cout << "\n\nVyvedennya vmistu drugogo spysku : " << endl << endl;
for (Lit=MyList2.begin() ; Lit!=MyList2.end(); Lit++)
{
cout << Lit->Ship << " - " << Lit->ch1.Type;
cout <<"; V: " << Lit->ch1.freight<< "tonn" << endl;
}
//zav 17
//porahyvatu skilyku elem z list 2 zadoviljnyae IsInRange()
for (Lit=MyList2.begin(),index=0 ; Lit!=MyList2.end(); Lit++)
if (IsInRange(Lit))
{
index++;
}
cout << "\nV drugomu spysku je " << index << " korabliv, zapysy yakyh zadoviljnyayut ymovy";
cin.get();
return 0;
}
//---------------------------------------------------------------------------
Протокол роботи програми
Висновок: Написав програму з використанням STL. Програма демонструє роботу з контейнерами STL і використовує алгоритм STL вказаний завданням.