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