c++学习11

来源:互联网 发布:捷西网络官网地址 编辑:程序博客网 时间:2024/06/15 23:27
// 定义一个vector容器,存储在未来6个月里要阅读的书的名字,
// 定义一个set,用于记录已经看过的书名。
// 本程序支持从vector中选择一本没有读过而现在要读的书,
// 并将该书名放入记录已读书目的set中,
// 并且支持从已读书目的set中删除该书的记录。

// 在虚拟的6个月后,输出已读书目和还没有读的书目

#include <iostream>#include <set>#include <vector>#include <string>#include <cstdlib>#include <ctime>using namespace std;int main(){vector<string> books;set<string> readedBooks;string name;// 建立保存未来6个月要阅读的书名的vector对象cout << "Enter names for books you'd like to read\(Ctrl+Z to end):"<< endl;while (cin >> name)books.push_back(name);cin.clear(); // 使流对象重新有效bool timeOver = false;string answer, bookName;// 用当前系统时间设置随机数发生器种子srand( (unsigned)time( NULL ) );// 模拟随时间的流逝而改变读书记录while (!timeOver && !books.empty()) {// 时间未到6个月且还有书没有读过cout << "Would you like to read a book?(Yes/No)" << endl;cin >> answer;if (answer[0] == 'y' answer[0] == 'Y') {// 在vector中随机选择一本书int i = rand() % books.size(); // 产生一个伪随机数bookName = books[i];cout << "You can read this book: "<< bookName << endl;readedBooks.insert(bookName); // 将该书放入已读集合books.erase(books.begin() + i); // 从vector对象中删除该书cout << "Did you read it?(Yes/No)" << endl;cin >> answer;if (answer[0] == 'n' answer[0] == 'N') {// 没有读这本书readedBooks.erase(bookName); // 从已读集合中删除该书books.push_back(bookName); // 将该书重新放入vector中}}cout << "Time over?(Yes/No)" << endl;cin >> answer;if (answer[0] == 'y' answer[0] == 'Y') {// 虚拟的6个月结束了timeOver = true;}}if (timeOver) {// 虚拟的6个月结束了// 输出已读书目cout << "books read:" << endl;for (set<string>::iterator sit = readedBooks.begin();sit != readedBooks.end(); ++sit)cout << *sit << endl;// 输出还没有读的书目cout << "books not read:" << endl;for (vector<string>::iterator vit = books.begin();vit != books.end(); ++vit)cout << *vit << endl;}elsecout << "Congratulations! You have read all these books."<<endl;return 0;}
// 建立作者及其作品的multimap容器。
// 使用find 函数在multimap中查找元素,并调用erase将其删除。
// 当所寻找的元素不存在时,程序依然能正确执行

#include <iostream>#include <map>#include <string>using namespace std;int main(){multimap<string, string> authors;string author, work, searchItem;// 建立作者及其作品的multimap容器do {cout << "Enter author name(Ctrl+Z to end):" << endl;cin >> author;if (!cin)break;cout << "Enter author's works(Ctrl+Z to end):" << endl;while (cin >> work)authors.insert(make_pair(author, work));cin.clear();// 读入了一位作者的所有作品后使流对象重新有效}while (cin);cin.clear(); // 使流对象重新有效// 读入要找的作者cout << "Who is the author that you want erase:" << endl;cin >> searchItem;// 找到该作者对应的第一个元素multimap<string,string>::iterator iter =authors.find(searchItem);if (iter != authors.end())// 删除该作者的所有作品authors.erase(searchItem);elsecout << "Can not find this author!" << endl;// 输出multimap对象cout << "author\t\twork:" << endl;for (iter = authors.begin(); iter != authors.end(); ++iter)cout << iter->first << "\t\t" << iter->second << endl;return 0;}


对find函数所返回的迭代器进行判断,当该迭代器指向authors中的有效元素时才进行erase操
作,从而保证当所寻找的元素不存在时,程序依然能正确执行。


原创粉丝点击