当前位置:编程学习 > C/C++ >>

暑假c++复习11

// 定义一个vector容器,存储在未来6个月里要阅读的书的名字,
// 定义一个set,用于记录已经看过的书名。
// 本程序支持从vector中选择一本没有读过而现在要读的书,
// 并将该书名放入记录已读书目的set中,
// 并且支持从已读书目的set中删除该书的记录。
// 在虚拟的6个月后,输出已读书目和还没有读的书目

[cpp] 
#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; 

else 
cout << "Congratulations! You have read all these books."<<endl; 
return 0; 

// 建立作者及其作品的multimap容器。
// 使用find 函数在multimap中查找元素,并调用erase将其删除。
// 当所寻找的元素不存在时,程序依然能正确执行
[cpp] 
#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); 
else 
cout << "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操
作,从而保证当所寻找的元素不存在时,程序依然能正确执行。


作者:sunshinewave
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,