练习11.15:对一个int到vector
的map,其mapped_type
,key_type
和value_type分别是什么?
map<int,vector<int>>::mapped_type v1;//v1 是一个vector类型
map<int,vector<int>>::key_type v2; //v2 是一个int类型
map<int,vector<int>>::value_type v3; //v3 是一个pair>类型
练习11.16:使用一个map迭代器编写一个表达式,将一个值赋予一个元素。
/*
*C++primer(第五版)
*练习11.16
*2015/10/8
*问题描述:
练习11.16:使用一个map迭代器编写一个表达式,将一个值赋予一个元素。
*说明:简单写了个样例,找到关键字“good”,将good后面值变为100,关键字不能被赋值,因为是const的
*作者:Nick Feng
*邮箱:[email protected]
*/
#include
#include
#include
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
*邮箱:[email protected]
*/
#include
#include
#include
#include
#include
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
练习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
*邮箱:[email protected]
*/
/*
*C++Primer(第五版)
*11.2.2节练习
*练习11.11
*问题描述:练习11.11:不使用decltype重新定义bookstore。
* 说明:这道题是让你明白decltype(compareIsbn)*的类型究竟是什么,顺便复习了一下函数指针的内容
*作者:Nick Feng
*邮箱:[email protected]
*/
#include
#include
#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 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 bookstore(compareIsbn);
multiset ::iterator it = bookstore.begin(); //本题要求你做的东西
}