C++Primer第五版 第十一章*题答案(21~30)

发布于:2021-05-17 13:38:06

21:知识点1:向map中添加元素,元素的类型必须是pair,但是并没有现成的pair元素,所以需要在insert()的参数列表中创建一个pair



familyy.insert({"dsa","das"});//c++11支持
familyy.insert (pair("asd","das"));//显示创建一个pair
familyy.insert(make_pair("de","1"));//显示创建一个pair
familyy.insert(map::value_type ("d","da"));//显示创建一个pair


知识点2:insert的返回值依赖于容器类型与元素类型,对于不包含重复关键字的容器,insert返回一个pair,第一个成员是指向具有指定关键字的元素,第二个元素是一个bool值,指出插入元素是已经在元素中还是插入成功,若关键词已在容器中,insert什么都不做,第二个参数变为false


知识点3:递增计数器:ret.first是pair的第一个成员,是map的迭代器,->之后,解引用迭代器,提取的是map中的元素,也就是一个pair,找到此元素的第二个值,进行递增操作



++ret.first->second;//ret的类型为pair::iterator , bool> ret




此题即是将word的计数值进行递增操作,也就是由0变成1.


22:知识点:在对multiset和multimap操作insert时,因为可以插入相同的元素,所以在insert的返回值中只有一个元素,没有了bool值


pair>;
pair>::iterator,bool>;



23:这个直接将map改成multimap即可,注意的是重复元素的添加与否,可以由同名的孩子了吗~~



24:知识点1:和顺序容器一样,我们可以向erase()传入一个迭代器或者一个迭代器对来删除元素,函数返回void,还有一个版本的erase()接收一个key_type的参数,删除每个关键词为参数的元素,返回一个size_type,指出被删除元素的数量


知识点2:set不支持下标操作,map和unordered_map支持下标操作,multimap和unordered_multimap也没有下标操作,因为有相同的元素


知识点3:map的下标操作接受一个索引(关键词),获取的是此关键词相关联的值(即mapped_type值),但是若map中无此关键词,则它会创建一个新的元素并插入到map中,关联值将进行值初始化


知识点4:c.at(k):访问关键词为k的元素,若k不在c中,抛出out_of_range异常


知识点5:map的下标操作与解引用迭代器*(返回value_type)返回值不同




此题程序,首先定义了一个空的map,加入一个pair<0,1>




25:首先定义了一个空vector,但是v[0]需要访问其第一个元素,而vector为空,会报错。




26:可以使用key_type对其执行下标操作,mapped_type为其返回类型。



map map1;
map1[string("tttt")] = 1;
map1[string("ggg")] = 2;//同时也是map的一种初始化方法
map1.insert(pair("niubi", 3));//第二种初始化方法



27:知识点1:对于map和set中的元素查找以及计数使用find和count,都接受关键字,find返回关键字指向的元素的迭代器或者尾后迭代器,count返回关键字的数量


知识点2:map的下标操作可能会造成副作用,插入我们不想插入的元素,可以用find代替寻找元素




P388页:1:如果我们关心的只是谋个元素是否在容器中,可以使用find 。2:对于允许重复关键字的容器,count可以做到更多。3:是否需要计数是个关键




28:见27题知识点1.



map>::iterator it;


29:知识点1:lower_bound和upper_bound找不到关键词的话,会指向一个不影响排序的关键词插入位置


知识点2:equal_range()函数,接收一个关键字,返回一个迭代器pair,若关键字存在,第一个迭代器指向该关键字匹配的元素,第二个关键字指向最后一个元*ヅ渲蟮奈恢茫绻丶植淮嬖冢礁龅鞫贾赶蚬丶挚梢圆迦氲奈恢




见知识点




30:得到此关键词对应的值

相关推荐

最新更新

猜你喜欢