C Primer 第十一章答案

2021-09-26 02:34:20 字數 3892 閱讀 6879

關聯容器map,set 

習題11.1

map是鍵-值對應,其可儲存兩個型別,而vector單單是乙個型別的儲存容器。

map通過關鍵字獲得值,而vector 通過迭代器或者下標引索獲得。

習題11.2

list:頻繁需要插入、刪除操作

vector:需求更多的隨機訪問操作

deque:在兩端插入刪除、但又都對隨機訪問有需要

map:需要鍵值對應(字典),需要鍵值轉換(如客戶端輸入字串,轉化為對型別一致對應物件的操作)

set:需求查詢。

習題11.3

#include

#include

#include

#include

using namespace std;

int main()

for (const auto& w : word_count)

cout << w.first << " occurs " << w.second <<

((w.second > 1) ? " times " : " time ") << endl;

system("pause");

return 0;

}習題11.4

#include

#include

#include

#include

using namespace std;

int main()

for (const auto& w : word_count)

cout << w.first << " occurs " << w.second <<

((w.second > 1) ? " times " : " time ") << endl;

system("pause");

return 0;

}習題11.5 

map是鍵值對應,而set只包括關鍵字

習題11.6

set不存在重複元素,而list存在。

習題11.7

#include

#include

#include

#include

#include

using namespace std;

int main()

}for (const auto& w : word_count)

system("pause");

return 0;

}習題11.8

vector在新增每個元素時,使用find判斷是否已有。set可以不會新加入已有的關鍵值。

習題11.9

map>

習題11.10

可以定義,但是使用時,《是未定義的。

習題11.11

略習題11.12 11.13

#include

#include

#include

#include

#include

#include

using namespace std;

int main()

);// vec.emplace_back(str, i); //!!! easiest way.

for (const auto& p : vec)

std::cout << p.first << ":" << p.second << std::endl;

system("pause");

return 0;

}至於為什麼emplace_back最簡單也最有效,可參考

它是直接在容器管理的記憶體空間內建構函式

練習11.14

略。將名和生日定義為string。放入pair。最終是map>

練習11.16

std::mapmap;

map[25] = "a";

std::map::iterator it = map.begin();

it->second = "b";

練習11.17

第二個非法, multiset沒有push_back

練習11.18

是沒有找到word_count到底是個啥。。。。

練習11.19

略練習11.20

#include

#include

#include

#include

using namespace std;

int main()

);if(!ret.frist) ++ret.frist.second;

}for (const auto& w : word_count)

cout << w.first << " occurs " << w.second <<

((w.second > 1) ? " times " : " time ") << endl;

system("pause");

return 0;

}練習11.21

操作類似

auto ret = word_count.insert();

++ret.frist.second;

練習11.22

元素std::pair>  

返回型別 std::pair>  

練習11.23

略。將下標操作,改為insert即可,在第一層迴圈auto ret = word_count.insert();

在第二層迴圈ret.frist.second.push_back()。

練習11.24

新增關鍵字為0的值為1 的pair

練習11.25

非法,v[0]不存在

練習11.27 

對關鍵字計數使用count,find查詢關鍵字第一次出現的位置

練習11.28

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int main()

}, } };

auto s1 = m.find("a");

auto s2 = m.lower_bound("c");

auto s3 = m.upper_bound("c");

auto s4 = m.equal_range("c");

system("pause");

return 0;

}練習11.29

upper_bound、lower_bound返回指向可以插入元素的迭代器

equal_range返回pair,其中的兩個迭代器都是指向可以插入元素的迭代器

練習11.30

返回第乙個匹配到的pair的frist元素

練習11.31

略,注意點:全部刪完,進入while(1),當find返回end的時候break,保證每乙個都能找到

練習11.33

#include

#include

#include

#include

#include

using std::string;

using std::ifstream;

std::mapbuildmap(ifstream& map_file)

const string& transform(const string& s, const std::map& m)

void word_transform(ifstream& map, ifstream& input)

}int main()

練習11.34

沒有該關鍵字,會直接建立

練習11.35

會直接插入,出現重複關鍵字

C Primer 答案 第十一章

11.1 map 關聯容器,存放key和value vector 順序容器,只存value 11.2 list 經常在任何位置刪除新增資料 vector 沒別的要求一般就用它 deque 棧 map 字典 set 數學集合 11.3 and 11,4 include include include ...

c primer 第十一章 使用類

一,操作符過載 1 函式過載 多型 名稱相同,特徵標 引數列表 不同的函式。完成相同的基本操作 2 操作符左側的對像是呼叫物件,操作符右側的作為引數被傳遞的物件 3 過載限制 1 過載後的操作符至少有乙個運算元是使用者定義的型別。防止使用者為標準型別過載操作符 2 使用操作符,不能違反操作符原來的句...

C Primer 第十一章 使用類筆記

以加法為例 函式名 time time operator const time time 乙個類類相加的過載運算子 呼叫時 sum a b 如果a b都是time類,則等價於sum a.operator b 過載限制 1.過載後的運算子至少有乙個運算元是使用者定義的型別。2.不能建立新運算子 3.過...