程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 暑假c++復習11

暑假c++復習11

編輯:C++入門知識

// 定義一個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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved