Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Список об’єктів класу personСодержание книги
Поиск на нашем сайте Пошук людини із заданим іменем виявляється дуже швидким при роботі з множинами чи мультимножинами. Якщо ж для нас важливий не швидкий пошук, а швидка вставка чи видалення об’єктів типу person, то краще вдатися до списків. Як це зробити, показано в програмі 15.32. #include<iostream> #include<conio> #include<list> #include<algorithm> #include<string> using namespace std; class person{ private: string lastName; string firstName; long phoneNumber; public: person():lastName("__"),firstName("__"),phoneNumber(0) { } person(string lana,string fina,long pho): lastName(lana),firstName(fina),phoneNumber(pho) { } friend bool operator<(const person&,const person&); friend bool operator==(const person&,const person&); friend bool operator!=(const person&,const person&); friend bool operator>(const person&,const person&);
void display() const {cout<<endl<<lastName<<"\t "<<firstName<<"\t "<<phoneNumber; } long get_phone() const {return phoneNumber; } };
bool operator<(const person& p1, const person& p2) {if (p1.lastName==p2.lastName) return (p1.firstName<p2.firstName?true:false); else return (p1.lastName<p2.lastName?true:false); };
bool operator==(const person& p1, const person& p2) {return(p1.lastName==p2.lastName && p1.firstName==p2.firstName? true:false); };
bool operator!=(const person& p1,const person& p2) {return!(p1==p2);}
bool operator>(const person& p1,const person& p2) {return!((p1<p2)&&(p1==p2)); } ////////////
int main() {list <person> perslist; list <person>::iterator iter1; perslist.push_back(person("Annie","Mannie",5667888)); perslist.push_back(person("Billie","Sonny",5667889)); perslist.push_back(person("Rymmie","Catty",5667880)); perslist.push_back(person("Annie","Mannie",9667888)); perslist.push_back(person("Holly","Yvette",5667888)); cout<<"\nChyslo zapysiv: "<<perslist.size();
iter1=perslist.begin();//вивід вмісту списку while(iter1!=perslist.end()) (*iter1++).display(); //знайти інформацію за ключем string searchLastName,searchFirstName; cout<<"\nVvedit prizvywe shukanoi liudyny: "; cin>>searchLastName; cout<<"\nVvedit imia shukanoi liudyny: "; cin>>searchFirstName; //створення персони з таким іменем person searchPerson(searchLastName,searchFirstName,0); //пошук по списку першого входження даного значення iter1=find(perslist.begin(),perslist.end(),searchPerson); if(iter1!=perslist.end()) {cout<<"Znajdeno "; do {(*iter1).display(); ++iter1; iter1=find(iter1,perslist.end(),searchPerson); } while(iter1!=perslist.end()); } else cout<<"Vidsutnij";
//Знайти людину за номером телефону cout<<"\n\nVvedit N telephonu "; long snumber; cin>>snumber; bool found_one=false; for(iter1=perslist.begin();iter1!=perslist.end();++iter1) {if(snumber==(*iter1).get_phone()) {if (!found_one) {cout<<"Znajdeno "; found_one=true; } (*iter1).display(); } } if (!found_one) cout<<"Vidsutnij:"; cout<<endl; getch(); return 0; } Програма 15.32 Оскільки ми маємо справу не з множиною і не з відображенням, то методами lower_bouna() та upper_bound() ми скористатися не можемо. Замість них ми використовуємо вже знайому нам функцію find. iter1=find(perslist.begin(),perslist.end(),searchPerson); Якщо функція повертає значення знайденого елемента, потрібно знову викликати її для здійснення пошуку, починаючи з наступного запису після знайденого. Це дещо ускладнює програму, оскільки доводиться вносити в неї цикл з двома викликами find(). Складніше шукати дані по заданому номеру телефона, оскільки методи цього класу, в тому числі find(), призначені для пошуку первинної інформації. Тому доводиться «вручну» шукати номер телефону, здійснюючи ітерацію по списку і порівнюючи заданий номер телефону з наявним у черговому поточному записі. {if(snumber==(*iter1).get_phone()) При використанні списків для збереження об’єктів потрібно оголосити чотири оператори порівняння для конкретного класу: ==,!=, < i >. В залежності від того, які алгоритми використовуються в програмі визначають ті чи інші з них, оскільки далеко не завжди потрібні всі оператори відразу. Так, в нашому прикладі ми могли б обмежитися визначенням оператора ==. А коли б в програмі зустрічався алгоритм sort() для списку, була б необхідна перезавантажувана операція <.
Функціональні об’єкти Це поняття широко використовується у STL. Одним з найпопулярніших застосувань функціональних об’єктів є передача їх у якості аргументу алгоритмам. Тим самим можна регулювати їх поведінку. Ми вже використовували функціональні об’єкти в програмі 15.6 (функціональний об’єкт greater<>(), використовуваний нля сортування даних у зворотньому порядку). Функціональний об’єкт – це функція, яка таким способом прибудовується до класу, що виглядає як звичайний об’єкт. Тим не менше, в такому класі не може бути компонентних даних, а є тільки один метод: перезавантажувана операція (). Клас часто роблять шаблонним, щоб можна було працювати з різними типами даних.
|
||
|
Последнее изменение этой страницы: 2021-12-15; просмотров: 86; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.110 (0.008 с.) |