51STL

it2025-04-18  4

51STL_list联系人demo

示例代码

示例代码

#include <iostream> #include <list> #include <string> using namespace std; enum MenuOptionSelection { InsertContactListEntry = 0, SortOnName = 1, SortOnNumber = 2, DisplayEntries = 3, EraseEntry = 4, QuitContactList = 5 }; class ContactListItem //一个联系人 { public: string strContactName; string strPhoneNumber; ContactListItem(const string& strName, const string& strNumber) { strContactName = strName; strPhoneNumber = strNumber; } bool operator < (const ContactListItem itemToCompare) const // < 运算符重载,用于按姓名排序 { return (this->strContactName < itemToCompare.strContactName); } bool operator == (const ContactListItem& itemToCompare) const { return (itemToCompare.strContactName == this->strContactName); //参数传进来的联系人是否等于当前联系人 } }; int ShowMenu() { cout << "*** 选择你的操作 ***" << endl; cout << "0. 输入新的联系人" << endl; cout << "1. 按姓名排序" << endl; cout << "2. 按照电话号码排序" << endl; cout << "3. 显示所有联系人" << endl; cout << "4. 删除一个联系人" << endl; cout << "5. 退出" << endl; int nOptionSelected = 0; cin >> nOptionSelected; cout << endl; return nOptionSelected; } ContactListItem GetContactInfo() { cout << "*** 输入新的联系人 ***" << endl; string strName; cout << "联系人姓名:"; cin >> strName; string strPhoneNumber; cout << "联系人电话:"; cin >> strPhoneNumber; return ContactListItem(strName, strPhoneNumber); } void DisplayContactList(const list<ContactListItem>& listContacts) //显示联系人函数 { cout << "*** 这是所有联系人的信息 ***" << endl; cout << "一共有" << listContacts.size() << "个联系人" << endl; list<ContactListItem>::const_iterator iContact; for(iContact = listContacts.begin(); iContact != listContacts.end(); ++iContact) { cout << endl << "姓名:" << iContact->strContactName << endl; cout << "电话:" << iContact->strPhoneNumber << endl; } cout << endl; } bool Predicate_CheckItemOnNumber(const ContactListItem& item1, const ContactListItem& item2) { return item1.strPhoneNumber < item2.strPhoneNumber; } void EraseEntryFromList(list<ContactListItem>& listContacts) { cout << "*** 删除一个联系人 ***" << endl; cout << "被删除的联系人姓名:"; string strNameToErase; cin >> strNameToErase; listContacts.remove(ContactListItem(strNameToErase, " ")); //用姓名构造了一个联系人,再放到list容器中进行删除 } int main() { list<ContactListItem> listContacts; int nUserSelection = 0; while((nUserSelection = ShowMenu()) != QuitContactList) { switch(nUserSelection) { case InsertContactListEntry: //使用枚举替换掉数字,增强可读性 listContacts.push_back(GetContactInfo()); cout << "联系人添加成功!" << endl; break; case SortOnName: listContacts.sort(); DisplayContactList(listContacts); break; case SortOnNumber: listContacts.sort(Predicate_CheckItemOnNumber); DisplayContactList(listContacts); break; case DisplayEntries: DisplayContactList(listContacts); break; case EraseEntry: EraseEntryFromList(listContacts); DisplayContactList(listContacts); break; case QuitContactList: cout << "现在退出了,再见!" << endl; break; default: cout << "非法的输入!" << nUserSelection << ", " << "有效的选项是数字0-4" << endl; break; } } return 0; }
最新回复(0)