C++Primer第五版 11.3.1节练习
2015-10-08 16:09
429 查看
练习11.15:对一个int到
练习11.16:使用一个map迭代器编写一个表达式,将一个值赋予一个元素。
练习11.17:假定c是一个string的multiset,v是一个string的vector,解释下面的调用。指出每个调用是否合法。
练习11.18:写出第382页循环中map_it的类型,不要使用auto或decltype。
答:
练习11.19:定义一个变量,通过对11.2.2节(第378页)中的名为bookstore的multiset调用begin()来初始化这个变量。写出变量的类型,不要使用auto或decltype.
vector<int>的map,其
mapped_type,
key_type和value_type分别是什么?
map<int,vector<int>>::mapped_type v1;//v1 是一个vector<int>类型 map<int,vector<int>>::key_type v2; //v2 是一个int类型 map<int,vector<int>>::value_type v3; //v3 是一个pair<int,vector<int>>类型
练习11.16:使用一个map迭代器编写一个表达式,将一个值赋予一个元素。
/* *C++primer(第五版) *练习11.16 *2015/10/8 *问题描述: 练习11.16:使用一个map迭代器编写一个表达式,将一个值赋予一个元素。 *说明:简单写了个样例,找到关键字“good”,将good后面值变为100,关键字不能被赋值,因为是const的 *作者:Nick Feng *邮箱:nickgreen23@163.com */ #include <iostream> #include <string> #include <map> using namespace std; int main() { map<string,int> m1{{"good",1},{"girl",2},{"boy",3}}; map<string,int>::iterator it = m1.begin(); while(it != m1.end()) { if((*it).first == "good") (*it).second = 100; ++it; } for(auto &m : m1) cout << m.first << " " << m.second << " "; cout << endl; return 0; }
练习11.17:假定c是一个string的multiset,v是一个string的vector,解释下面的调用。指出每个调用是否合法。
copy(v.begin(),v.end(),inserter(c,c.end()));//正确 copy(v.begin(),v.end(),back_inserter(c)); //错误 multiset没有push_back这个操作,尾插法不适合 copy(c.begin(),c.end(),inserter(v,v.end()));//正确 copy(c.begin(),c.end(),back_inserter(v));//正确
/* *C++primer(第五版) *练习11.17 *2015/10/8 *问题描述: 练习11.17:假定c是一个string的multiset,v是一个string的vector,解释下面的调用。指出每个调用是否合法。 copy(v.begin(),v.end(),inserter(c,c.end())); copy(v.begin(),v.end(),back_inserter(c)); copy(c.begin(),c.end(),inserter(v,v.end())); copy(c.begin(),c.end(),back_inserter(v)); *说明:为了看效果,需要把注释的一个一个去掉,单独看一句copy *作者:Nick Feng *邮箱:nickgreen23@163.com */ #include <iostream> #include <string> #include <set> #include <map> #include <algorithm> using namespace std; int main() { multiset<string> c = {"good","good","best","never","let","it","rest"}; vector<string> v = {"good","good","best","never","let","it","rest"}; copy(v.begin(),v.end(),inserter(c,c.end()));//正确 //copy(v.begin(),v.end(),back_inserter(c)); //错误 multiset没有push_back这个操作,尾插法不适合 //copy(c.begin(),c.end(),inserter(v,v.end()));//正确 //copy(c.begin(),c.end(),back_inserter(v));//正确 for(vector<string>::iterator it = v.begin(); it != v.end(); ++it) cout << *it << " "; cout << endl; for(multiset<string>::iterator it = c.begin(); it != c.end(); ++it) cout << *it << " "; cout << endl; return 0; }
练习11.18:写出第382页循环中map_it的类型,不要使用auto或decltype。
答:
map<const string, size_t>::iterator map_it//见382页11.3.1节
练习11.19:定义一个变量,通过对11.2.2节(第378页)中的名为bookstore的multiset调用begin()来初始化这个变量。写出变量的类型,不要使用auto或decltype.
/* *C++primer(第五版) *练习11.19 *2015/10/8 *问题描述:练习11.19:定义一个变量,通过对11.2.2节(第378页)中的名为bookstore的multiset调用begin()来初始化这个变量。写出变量的类型,不要使用auto或decltype. *说明:如果你会做练习11.11,这道题你就明白怎么做了 *作者:Nick Feng *邮箱:nickgreen23@163.com */ /* *C++Primer(第五版) *11.2.2节练习 *练习11.11 *问题描述:练习11.11:不使用decltype重新定义bookstore。 * 说明:这道题是让你明白decltype(compareIsbn)*的类型究竟是什么,顺便复习了一下函数指针的内容 *作者:Nick Feng *邮箱:nickgreen23@163.com */ #include <iostream> #include <set> #include "Sales_data.h" using namespace std; bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs) { return lhs.isbn() < rhs.isbn(); } int main() { //注释的地方为原始定义 //multiset<Sales_data,decltype(compareIsbn)*> bookstore(compareIsbn); bool (*pf)(const Sales_data &,const Sales_data &) = compareIsbn; //pf是指向compareIsbn函数的指针 //F是函数类型,不是指针,F*是一个带指针的复合类型,参考P223页 using F = bool(const Sales_data &,const Sales_data &); multiset<Sales_data,F*> bookstore(compareIsbn); multiset<Sales_data,F*>::iterator it = bookstore.begin(); //本题要求你做的东西 }
相关文章推荐
- C++Primer笔记之关联容器的使用详解
- 如何更好的利用《C++ Primer》学习C++?
- c++primer plus 2.7编程练习作业
- C++primer 第十章 单词转换程序 运行不了解决办法
- 头文件中包含const与非const对象
- 几个标准库类型的简单使用
- C++Primer _vector _习题3.13
- C++Primer _vector _习题3.14
- Sales_item.h (C++ Primer 第五版)
- forward_list未定义+=符号,而改用advance()函数改变迭代器
- C++ primer 笔记
- C++Primer学习笔记
- 重读c++primer (第五版) -- 引子
- (福利)”C++Primer笔记“和”Java经典入门笔记“
- C++复习学习提纲
- [C++ Primer]第一章 快速入门
- C++primer 阅读笔记-模板与泛型编程(效率与灵活性+)
- C++primer阅读笔记-模板与泛型编程(重载与模板)
- C++primer阅读笔记-模板与泛型编程(模板实参推断)
- C++primer阅读笔记-重载运算与类型转换(可调用对象与function)