C Primer 答案 第十一章

2021-09-01 08:45:05 字數 4253 閱讀 1535

11.1

map : 關聯容器,存放key和value

vector : 順序容器,只存value

11.2

list: 經常在任何位置刪除新增資料

vector: 沒別的要求一般就用它

deque: 棧

map: 字典

set: 數學集合

11.3 and 11,4

#include #include #include #include using namespace std;

string change(string &s)

return temp;

}int main(int argc, char *argv)

for(auto &i : word_count)

cout << i.first << " occurs " << i.second

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

return 0;

}/*輸出

catcat,

dogfish

catbreak

cat occurs 3 times

dog occurs 1 time

fish occurs 1 time

*/

11.7

map> home;

home["tom"].push_back("jack");

11.8

#include #include #include using namespace std;

int main(int argc, char *argv)

11.9

map> m;

11.10

都不能no viable overloaded operator for type 'map::iterator, int>' (aka 'map<__wrap_iter, int>')

11.11

multisetbookstore(compareisbn);

11.12

vector> vec;

vec.emplace_back("sss", 1);

11.13

第一種最簡單(clang-tidy)

vec.emplace_back("sss", 1);

vec.push_back();

vec.push_back(make_pair("sss", 1));

11.14

map>> m;

11.1511.16

mapcount = , };

auto it = count.begin();

it->second = 3;

11.17

(1)合法

(2)不合法 set裡沒有push_back

no member named 'push_back' in 'std::__1::multiset, std::__1::less>, std::__1::allocator> >'

(3)合法

(4)合法

11.18

map::iterator map_it = word_count.begin();

11.19

multiset::iterator it = bookstore.begin();

11.20

肯定是之前的又短又簡單

#include #include #include using namespace std;

int main(int argc, char *argv)

);        if(!ret.second)

++ret.first->second;

}for(auto i: word_count)

cout << i.first << "occurs  " << i.second << "times"<< endl;

return 0;

}

11.21

.first 是插入單詞的迭代器   ->second 是 size_t

所以執行++, 就是對插入單詞的size_t進行加1

11.22

pair> //引數型別

pair>::iterator, bool> //返回型別

11.23

multimap> home;

11.24

把 加入map中

11.25

表面上使v[0]為1

但是vec是空的, 所以該操作無意義,列印會發現v[0]還是空的

11.26

mapm;

m["dog"] = 1;

很明顯內是string , 返回值是int

11.27

count : 需要計數

find  :  只需要知道是否有

11.28

map>::iterator it = myset.find("abc");

11.29

upper_bound 和lower_bound 會返回map中不影響排序的第乙個安全插入點

equal_range 返回兩個成員都是c.end()的pair

11.30

pos.first  map中的key,該題具體指作者

pos.first->second map中的value,該題具體指作者的著作

11.31

#include #include #include using namespace std;

int main(int argc, char *argv)

, , };

while(m.find("tom") != m.end())

m.erase(m.find("tom"));

while(m.find("man") != m.end())

m.erase(m.find("man"));

for(auto i : m)

cout << i.first << "  "<

11.32

#include #include #include #include using namespace std;

int main(int argc, char *argv)

, , ,};

map> morder;

for(auto &i: m)

morder[i.first].insert(i.second);

for(auto &i : m)

cout << i.first << "  "<11.34

會出現錯誤,因為該函式中map為const,不支援下標運算

11.35

下標運算每次都會更新value的值,insert只有map中不存在該key時再有效果

#include #include #include using namespace std;

int main(int argc, char *argv)

};    m["tom"] = "b";

m["tom"] = "c";

m.insert();

m.insert();

cout << m["tom"] << endl;

cout << m["jack"] << endl;

return 0;}/*

cd*/

C Primer 第十一章答案

關聯容器map,set 習題11.1 map是鍵 值對應,其可儲存兩個型別,而vector單單是乙個型別的儲存容器。map通過關鍵字獲得值,而vector 通過迭代器或者下標引索獲得。習題11.2 list 頻繁需要插入 刪除操作 vector 需求更多的隨機訪問操作 deque 在兩端插入刪除 但...

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.過...