C++ Primer第五版_第十一章习题答案(11~20)

news/2024/11/26 23:23:17/

文章目录

      • 练习11.11
      • 练习11.12
      • 练习11.13
      • 练习11.14
      • 练习11.15
      • 练习11.16
      • 练习11.17
      • 练习11.18
      • 练习11.19
      • 练习11.20

练习11.11

不使用decltype 重新定义 bookstore。

using Less = bool (*)(Sales_data const&, Sales_data const&);
std::multiset<Sales_data, Less> bookstore(less);

练习11.12

编写程序,读入string和int的序列,将每个string和int存入一个pair 中,pair保存在一个vector中。

#include <vector>
#include <utility>
#include <string>
#include <iostream>int main()
{std::vector<std::pair<std::string, int>> vec;std::string str;int i;while (std::cin >> str >> i)vec.push_back(std::pair<std::string, int>(str, i));for (const auto &p : vec)std::cout << p.first << ":" << p.second << std::endl;
}

练习11.13

在上一题的程序中,至少有三种创建pair的方法。编写此程序的三个版本,分别采用不同的方法创建pair。解释你认为哪种形式最易于编写和理解,为什么?

vec.push_back(std::make_pair(str, i));
vec.push_back({ str, i });
vec.push_back(std::pair<string, int>(str, i)); 

使用花括号的初始化器最易于理解和编写。

练习11.14

扩展你在11.2.1节练习中编写的孩子姓达到名的map,添加一个pair的vector,保存孩子的名和生日。

#include <iostream>
#include <map>
#include <string>
#include <vector>using std::ostream;
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::make_pair;
using std::pair;
using std::vector;
using std::map;class Families
{
public:using Child = pair<string, string>;using Children = vector<Child>;using Data = map<string, Children>;void add(string const& last_name, string const& first_name, string birthday){auto child = make_pair(first_name, birthday);_data[last_name].push_back(child);}void print() const{for (auto const& pair : _data){cout << pair.first << ":\n";for (auto const& child : pair.second)cout << child.first << " " << child.second << endl;cout << endl;}}private:Data _data;
};int main()
{Families families;auto msg = "Please enter last name, first name and birthday:\n";for (string l, f, b; cout << msg, cin >> l >> f >> b; families.add(l, f, b));families.print();return 0;
}

练习11.15

对一个int到vector的map,其mapped_type、key_type和 value_type分别是什么?

  • mapped_type : vector
  • key_type : int
  • value_type : std::pair<const int,vector >

练习11.16

使用一个map迭代器编写一个表达式,将一个值赋予一个元素。

std::map<int, string>::iterator it = m.begin();
it->second = "hello";

练习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));

第二个调用不合法,因为 multiset 没有 push_back 方法。其他调用都合法。

练习11.18

写出第382页循环中map_it 的类型,不要使用auto 或 decltype。

map<string, size_t>::const_iterator map_it = word_count.cbegin();

练习11.19

定义一个变量,通过对11.2.2节中的名为 bookstore 的multiset 调用begin()来初始化这个变量。写出变量的类型,不要使用auto 或 decltype。

using compareType = bool (*)(const Sales_data &lhs, const Sales_data &rhs);
std::multiset<Sales_data, compareType> bookstore(compareIsbn);
std::multiset<Sales_data, compareType>::iterator c_it = bookstore.begin();

练习11.20

重写11.1节练习的单词计数程序,使用insert代替下标操作。你认为哪个程序更容易编写和阅读?解释原因。

#include <iostream>
#include <map>
#include <string>using std::string;
using std::map;
using std::cin;
using std::cout;int main()
{map<string, size_t> counts;for (string word; cin >> word;){auto result = counts.insert({ word, 1 });if (!result.second)++result.first->second;}for (auto const& count : counts)cout << count.first << " " << count.second << ((count.second > 1) ? " times\n" : " time\n");return 0;
}

使用 insert 更容易阅读和编写。insert 有返回值,可以明确的体现出插入操作的结果。


http://www.ppmy.cn/news/39308.html

相关文章

AtCoder Regular Contest 159(A)

A 题目大意&#xff1a; 给你一个nn的矩阵&#xff0c;矩阵中只有0和1&#xff0c;然后给的k是可以复制2 k^ kk 个所给的nn矩阵。算最短路&#xff08;0为没路&#xff0c;1为边权为1的路。 思路&#xff1a; n很小&#xff0c;k很大&#xff0c;复制2k^kk个肯定做不到&#xf…

【运维】nginx的安装、配置,支持tls1.2,1.3,以及限流、降级等

以下是 CentOS 上安装、配置和优化 Nginx&#xff0c;支持 TLS 1.2 和 1.3&#xff0c;以及限流和降级的步骤&#xff1a; 安装 Nginx&#xff1a; sudo yum install nginx配置 TLS 1.2 和 1.3&#xff1a; 编辑 /etc/nginx/nginx.conf 文件&#xff0c;在 http 部分下添加以…

关于信号源有哪些参数与功能(二)

在上期文章中&#xff0c;我们介绍了信号发生器的频率范围、相位噪声、频率分辨率、频率切换速度和输出功率范围五大功能&#xff0c;本期文章将继续介绍另外五大关键功能。 谐波 谐波是信号产生的自然结果&#xff0c;对于所有类型的信号发生器来说都是不可避免的。第二次、第…

c和c++区别

在很大程度上&#xff0c;C是C的超集&#xff0c;这意味着一个有效的C程序也是一个有效的C程序。 C和C的主要区别是&#xff0c;C支持许多附加特性。但是&#xff0c;C中有许多规则与C稍有不同。这些不同使得C程序作为C程序编译时可能以不同的方式运行或根本不能运行。 本节着重…

华为OD机试-最佳对手-2022Q4 A卷-Py/Java/JS

游戏里面&#xff0c;队伍通过匹配实力相近的对手进行对战。但是如果匹配的队伍实力相差太大&#xff0c;对于双方游戏体验都不会太好。 给定n个队伍的实力值&#xff0c;对其进行两两实力匹配&#xff0c;两支队伍实例差距在允许的最大差距d内&#xff0c;则可以匹配。要求在匹…

(邱维声)高等代数课程笔记:行列式的性质

行列式的性质 例题 1&#xff1a; ∣a11a12a21a22∣a11a22−a12a21,∣a11a21a12a22∣a11a22−a21a12.\left|\begin{matrix} a_{11} &a_{12}\\ a_{21} &a_{22} \end{matrix}\right| a_{11}a_{22} - a_{12}a_{21},~ \left|\begin{matrix} a_{11} &a_{21}\\ a_{12} …

新加坡电商系统上线指南

如果您正在考虑在新加坡开展电子商务业务并准备上线您的电商网站&#xff0c;以下是一些指南和建议&#xff0c;可以帮助您成功地启动和运营您的电商业务&#xff1a; 确认您的业务模式和目标市场。在上线之前&#xff0c;您需要确定您的业务模式&#xff0c;例如是B2B&#xf…

私有化部署的企业级业务编排引擎,jvs-逻辑引擎

在当下的智能化时代&#xff0c;企业级的IT系统如果继续按照传统的开发&#xff0c;那么不仅耗时耗力&#xff0c;最后还往往无法获得良好的结果。那么我先确定企业级的业务系统配置化的目标是什么&#xff1a; 降低人工操作成本&#xff1a;通过配置来自动化业务处理流程&…