C++Primer第五版 第十一章习题答案(11~20)
2017-03-01 09:33
615 查看
11:知识点:当我们使用decltype作用于某个函数时,它返回函数类型而非指针类型,因此我们需要显示的加上*已表明我们需要返回指针。作用:选择并返回操作数的类型,若为函数,则类型为函数的返回类型
12:知识点:pair,标准库类型,保存在头文件utility中。保存两个数据成员,类似容器。
13:知识点: pair有三种定义方式,所以创建pair的方式也有三种,make_pair(v1,v2)返回(创建)一个pair
14:知识点:还是注意在while中使用lambda表达式的好处与用法!
15:知识点1:P295有的类型,关联容器皆支持
知识点2:关联容器额外的类型别名:
key_type:表示此容器类型的关键字类型
mapped_type:每个关键字关联的类型,只适用于map
value_type:对于set,与key_type相同,对于map,为pair<const key_type,mapped_type>
知识点3:当解引用一个关联容器的迭代器时,我们会得到一个类型为容器的value_type的值的引用
知识点4:map的value_type是一个pair,我们可以改变pair的值,但是不能改变关键字成员的值
所以此题中,该map的key_type为int类型,value_type为pair<int ,vector<int>>类型,mapped_type为vector<int>类型。
16:
17:参考P358页,关于插入迭代器的讲解,第三个back_inserter()需要使用push_back(),而set不能够使用push_back()
18:
19:
20:知识点1:insert()在关联容器中添加一个元素或者一个元素范围,由于map和set没有重复关键字,所以插入相同的元素不会产生任何的影响
知识点2:向map中插入元素,必须是pair类型。
using compareType = bool (*)(const Sales_data& lhs, const Sales_data& rhs);//使用using来代替函数类型
12:知识点:pair,标准库类型,保存在头文件utility中。保存两个数据成员,类似容器。
#include<iostream> #include<string> #include<fstream> #include<list> #include<vector> #include<map> #include<set> #include<cctype>//ctype无法打开,包含tolower()函数和ispunct函数 #include<algorithm> #include<utility>//保存pair的头文件 using namespace std; int main(int argc, char**argv) { vector<pair<string,int>> vec1(12);//事先定义大小,或者使用push_back() ifstream in1("1.txt"); string str; size_t i = 0; while (in1>>str) { vec1[i].first = str; ++i; } ifstream in2("2.txt"); int val; size_t j = 0; while (in2>>val) { vec1[j].second = val; ++j; } vector<pair<string,int>>::iterator it1 = vec1.begin(); cout<<"vector中元素为:"<<endl; for (it1; it1 != vec1.end(); ++it1) { cout<<it1->first<<" "<<it1->second<<endl; } return 0; }
13:知识点: pair有三种定义方式,所以创建pair的方式也有三种,make_pair(v1,v2)返回(创建)一个pair
vec.push_back(std::make_pair(str, i));//make_pair返回一个用两个参数构成的pair vec.push_back({str, i}); vec.emplace_back(str, i); //最简便
14:知识点:还是注意在while中使用lambda表达式的好处与用法!
#include<iostream> #include<string> #include<fstream> #include<list> #include<vector> #include<map> #include<set> #include<cctype>//ctype无法打开,包含tolower()函数和ispunct函数 #include<algorithm> #include<utility>//保存pair的头文件 using namespace std; int main(int argc, char**argv) { //map的定义 map<string,vector<string>> family; vector<pair<string,string>> child; string first_name,child_name,_birthday; cout<<"本输入中,均以end输入表示截至"<<endl; //在while中使用lambda语句,可以传入多条语句参数,将我们想要传入的的输出参数也放在其中,注意后面的一对括号 while ( [&]()->bool {cout<<"请输入家庭的姓:"; return cin>>first_name && (first_name != "end");}() ) { while ([&]()->bool {cout<<"请输入孩子的名字:"; return cin>>child_name && (child_name != "end");}()) { family[first_name].push_back(child_name); while ([&]()->bool {cout<<"请输入孩子的生日:"; return cin>>_birthday && (_birthday != "end");}()) { child.push_back(make_pair(child_name,_birthday)); } } } //map同样支持迭代器操作 map<string ,vector<string>>::iterator mapi; for (mapi = family.begin(); mapi != family.end(); ++mapi)//C++ 11支持:const auto &s : word_count { //两个成员分别代表关键字和对应值 cout<<mapi->first<<" :"; vector<string>::iterator it1 = mapi->second.begin(); for (it1; it1 != mapi->second.end(); ++it1) { cout<<*it1<<" "; } } vector<pair<string,string>>::iterator it1 = child.begin(); cout<<"孩子们的信息:"<<endl; for (it1; it1 != child.end(); ++it1) { cout<<it1->first<<" "<<it1->second<<endl; } return 0; }
15:知识点1:P295有的类型,关联容器皆支持
知识点2:关联容器额外的类型别名:
key_type:表示此容器类型的关键字类型
mapped_type:每个关键字关联的类型,只适用于map
value_type:对于set,与key_type相同,对于map,为pair<const key_type,mapped_type>
知识点3:当解引用一个关联容器的迭代器时,我们会得到一个类型为容器的value_type的值的引用
知识点4:map的value_type是一个pair,我们可以改变pair的值,但是不能改变关键字成员的值
所以此题中,该map的key_type为int类型,value_type为pair<int ,vector<int>>类型,mapped_type为vector<int>类型。
16:
map<string,string> familyy; map<string,string>::iterator it1; it1->first = "I love you";//错误用法,key的值是const,不可修改 it1->second = "Me too !";
17:参考P358页,关于插入迭代器的讲解,第三个back_inserter()需要使用push_back(),而set不能够使用push_back()
18:
pair<const string, size_t>::iterator map_it;
19:
using compareType = bool (*)(const Sales_data &lhs, const Sales_data &rhs); multiset<Sales_data, compareType> bookstore(compareIsbn); multiset<Sales_data, compareType>::iterator c_it = bookstore.begin();
20:知识点1:insert()在关联容器中添加一个元素或者一个元素范围,由于map和set没有重复关键字,所以插入相同的元素不会产生任何的影响
知识点2:向map中插入元素,必须是pair类型。
auto ret = word_count.insert({word, 1}); if (!ret.second) ++ret.first->second;
相关文章推荐
- C++Primer第五版 第十九章习题答案(11~20)
- C++Primer第五版 第十五章习题答案(11~20)
- C++Primer第五版 第十章习题答案(11~20)
- C++Primer第五版 第十二章习题答案(11~20)
- C++Primer第五版 第九章习题答案(11~20)
- C++Primer第五版 第三章习题答案(11~20)
- C++Primer第五版 第十八章习题答案(11~20)
- C++Primer第五版 第十六章习题答案(11~20)
- C++Primer第五版 第六章习题答案(11~20)
- C++Primer第五版 第七章习题答案(11~20)
- C++Primer第五版 第八章习题答案(11~14)
- C++Primer第五版 第十三章习题答案(11~20)
- C++Primer第五版 第五章习题答案(11~20)
- C++Primer第五版 第十一章习题答案(1~10)
- C++Primer第五版 第十一章习题答案(21~30)
- c++primer(第五版) 第十一章 关联容器习题答案
- C++Primer第五版 第四章习题答案(11~20)
- C++Primer第五版 第二章习题答案(11~20)
- C++Primer第五版 第七章习题答案(1~10)
- C++Primer 中文版 第五版 第三章课后习题答案