Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 36; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.87.151 (0.007 с.) |