// listpers.cpp // Использование списка для хранения объектов person #include #include #include #include using namespace std; class person { private: string lastName; string firstName; long phoneNumber; public: person() : // конструктор без аргументов lastName("пусто"), firstName("пусто"), phoneNumber(0L) { } // конструктор с тремя аргументами 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\tТелефон: " << phoneNumber; } long get_phone() const // вернуть номер телефона { return phoneNumber; } }; // перегруженный == для класса person bool operator==(const person& p1, const person& p2) { return (p1.lastName == p2.lastName && p1.firstName == p2.firstName ) ? true : false; } // перегруженный < для класса person bool operator<(const person& p1, const person& p2) { if(p1.lastName == p2.lastName) return (p1.firstName < p2.firstName) ? true : false; return (p1.lastName < p2.lastName) ? true : false; } // перегруженный != для класса person bool operator!=(const person& p1, const person& p2) { return !(p1==p2); } // перегруженный > для класса person bool operator>(const person& p1, const person& p2) { return !(p1 persList; // список объектов типа person // итератор для этого списка list::iterator iter1; // занести объекты в список persList.push_back( person("Deauville", "William", 8435150) ); persList.push_back( person("McDonald", "Stacey", 3327563) ); persList.push_back( person("Bartoski", "Peter", 6946473) ); persList.push_back( person("KuangThu", "Bruce", 4157300) ); persList.push_back( person("Wellington", "John", 9207404) ); persList.push_back( person("McDonald", "Amanda", 8435150) ); persList.push_back( person("Fredericks", "Roger", 7049982) ); persList.push_back( person("McDonald", "Stacey", 7764987) ); cout << "\nЧисло записей: " << persList.size(); iter1 = persList.begin(); // вывод содержимого списка while( iter1 != persList.end() ) (*iter1++).display(); // найти информацию о людях с именами // и фамилиями, указанными в запросе string searchLastName, searchFirstName; cout << "\n\nВведите фамилию искомого человека: "; cin >> searchLastName; cout << "Введите имя: "; cin >> searchFirstName; //создать персону с таким именем person searchPerson(searchLastName, searchFirstName, 0L); //поиск по листу первого вхождения искомого значения iter1 = find(persList.begin(), persList.end(), searchPerson); if( iter1 != persList.end() ) //поиск следующих совпадений { cout << "Есть такой человек (такие люди) в списке: "; do { (*iter1).display(); //вывод найденных записей ++iter1; //продолжение поиска со следующей записи iter1 = find(iter1, persList.end(), searchPerson); } while( iter1 != persList.end() ); } else cout << "Человек с таким именем отсутствует в списке."; // найти человека по номеру телефона cout << "\n\nВведите номер телефона (формат 1234567): "; 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 << "Есть человек (или несколько) с таким номером телефона."; found_one = true; } (*iter1).display(); //display the match } } //end for if( !found_one ) cout << "Человек с таким номером телефона отсутствует в списке"; cout << endl; return 0; } //end main()