C++Primer(第五版 )第十一章 关联容器 章节编程练习答案

2023-10-27

11.1 描述mapvector的不同。

答:

map 是关联容器, vector 是顺序容器。

11.2 分别给出最适合使用listvectordequemap以及set的例子。

答:

  • list:双向链表,适合频繁插入删除元素的场景。
  • vector:适合频繁访问元素的场景。
  • deque:双端队列,适合频繁在头尾插入删除元素的场景。
  • map字典
  • set:适合有序不重复的元素的场景。

11.3 编写你自己的单词计数程序。

答:

11.4 扩展你的程序,忽略大小写和标点。例如,"example."、"example,"和"Example"应该递增相同的计数器。

答:

11.5 解释mapset的区别。你如何选择使用哪个?

答:

map 是键值对,而 set 只有键没有值。当我需要存储键值对的时候使用 map,而只需要键的时候使用 set

11.6 解释setlist的区别。你如何选择使用哪个?

答:

set 是有序不重复集合,底层实现是红黑树,而 list 是无序可重复集合,底层实现是链表。

11.7 定义一个map,关键字是家庭的姓,值是一个vector,保存家中孩子(们)的名。编写代码,实现添加新的家庭以及向已有家庭中添加新的孩子。

答:

11.8 编写一个程序,在一个vector而不是一个set中保存不重复的单词。使用set的优点是什么?

答:

set的优点是集合本身的元素就是不重复。

11.9 定义一个map,将单词与一个行号的list关联,list中保存的是单词所出现的行号。

答:

11.10 可以定义一个vector<int>::iterator 到 int 的map吗?list<int>::iterator 到 int 的map呢?对于两种情况,如果不能,解释为什么。

答:

可以定义 vector<int>::iterator 到 int 的map,但是不能定义 list<int>::iterator 到 int 的map。因为map的键必须实现 < 操作,list 的迭代器不支持比较运算。

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

答:

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

答:创建pair的3种方法

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

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

答:

11.15 对一个intvector<int>的map,其mapped_typekey_type和 value_type分别是什么?

答:

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

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

答:

11.17 假定c是一个stringmultisetv 是一个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

答:

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

答:

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

11.21 假定word_count是一个stringsize_tmapword是一个string,解释下面循环的作用:

答:

等价于

11.22  给定一个map<string, vector<int>>,对此容器的插入一个元素的insert版本,写出其参数类型和返回类型。

答:

11.23 11.2.1节练习中的map 以孩子的姓为关键字,保存他们的名的vector,用multimap 重写此map

答:

11.24 下面的程序完成什么功能?

答:

添加一个元素到map中,如果该键存在,则重新赋值。

11.25 对比下面的程序与上一题程序

答:

未定义行为,vector 的下标越界访问。

11.26 可以用什么类型来对一个map进行下标操作?下标运算符返回的类型是什么?请给出一个具体例子——即,定义一个map,然后写出一个可以用来对map进行下标操作的类型以及下标运算符将会返会的类型。

答:

11.27 对于什么问题你会使用count来解决?什么时候你又会选择find呢?

答:对于允许重复关键字的容器,应该用 count ; 对于不允许重复关键字的容器,应该用 find 。

11.28 对一个stringintvectormap,定义并初始化一个变量来保存在其上调用find所返回的结果。

答:

11.29 如果给定的关键字不在容器中,upper_boundlower_bound 和 equal_range 分别会返回什么?

答:

如果给定的关键字不在容器中,则 lower_bound和 upper_bound 会返回相等的迭代器,指向一个不影响排序的关键字插入位置。而equal_range 会返回一个 pairpair 中的两个迭代器都指向关键字可以插入的位置。

11.30 对于本节最后一个程序中的输出表达式,解释运算对象pos.first->second的含义。

答:
pos 是一个pairpos.first 是一个迭代器,指向匹配关键字的元素,该元素是一个 pair,访问该元素的第二个成员。

11.31 编写程序,定义一个作者及其作品的multimap。使用findmultimap中查找一个元素并用erase删除它。确保你的程序在元素不在map 中时也能正常运行。

答:

11.32 使用上一题定义的multimap编写一个程序,按字典序打印作者列表和他们的作品。

答:

11.33 实现你自己版本的单词转换程序。

答:

11.34 如果你将transform 函数中的find替换为下标运算符,会发生什么情况?

答:

如果使用下标运算符,当关键字未在容器中时,会往容器中添加一个新元素。

11.36 我们的程序并没检查输入文件的合法性。特别是,它假定转换规则文件中的规则都是有意义的。如果文件中的某一行包含一个关键字、一个空格,然后就结束了,会发生什么?预测程序的行为并进行验证,再与你的程序进行比较。

答:

如果关键字没有对应的规则,那么程序会抛出一个 runtime_error

11.37 一个无序容器与其有序版本相比有何优势?有序版本有何优势?

答:

无序容器拥有更好的性能,有序容器使得元素始终有序。

11.38 用 unordered_map 重写单词计数程序和单词转换程序。

答:

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++Primer(第五版 )第十一章 关联容器 章节编程练习答案 的相关文章

  • QTableView 并双击一个单元格

    我正在开发测试用例编辑器 该编辑器包含 USART 传输和接收数据包格式 编辑器是一个表格视图 发送和接收数据包的长度为八个字节 例如 0x01 0x02 0x03 0x08 它在我的第五和第六栏中 现在 我希望此列中的单元格为只读 但是当
  • "/>

    Error 5 expected Css test css gt gt 我需要给吗 在这里 因为我的解决方案仍然无法正常工作 它开始给出一些其他错误 您需要添加一个等号 如下所示 Css test css gt gt 解释 块将整个语句或块
  • 字节序和大小为 1 的位域

    我认为字节顺序不应该影响大小最多为 1 个字节的结构 但这是我的小端机器上的代码 include
  • 如何在 OpenCV 中将 Float Mat 写入文件

    我有一个矩阵 Mat B 480 640 CV 32FC1 包含浮点值 我想将此矩阵写入一个可以打开的文件Notepad https en wikipedia org wiki Windows Notepad or 微软Word https
  • 使用 Protobuf-net 序列化 object[]

    我想序列化和反序列化存储在对象数组中的一些值 public class Sample public object Data 我知道在运行时数组中期望什么类型 实际上 我想将 Sample 内部的数据视为消息流 就个人而言 我知道我可以使用S
  • 在 VS 扩展性演练中,Guid 应包含 32 位数字和 4 个破折号 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

    我正在使用演练 第 1 部分 创建基本项目系统与网站上所写的完全一样http msdn microsoft com en us library cc512961 aspx http msdn microsoft com en us libr
  • 具有未指定长度数组的 PInvoke 结构

    C 定义 typedef struct const uint8 t buf int bufLen Info int Foo Info info C 定义 StructLayout LayoutKind Sequential public s
  • 无法使用Boost.process

    我下载并打包了 1 54 0 版本的 Boost 库 我做了类似回答这个问题的一切 如何在 Visual Studio 2010 中使用 Boost https stackoverflow com questions 2629421 how
  • 将函数模板传递给其他函数

    假设我有一个函数可以对任意容器类型 C 11 执行某些操作 template
  • 拖动用户控件,但将其保留在 WPF 中其父级的边界内

    我有一个用户控件 正在将其拖动到网格内 Z Index 设置得相当高 这样我就可以将其保持在其他孩子之上 拖动控件效果很好 但如果用户想要将控件移到网格之外 它会允许这样做 How do I keep it from leaving the
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • 如何在configure.in中测试C++库的可用性?

    我正在 GNU Linux 上开发一个 C 项目 并且正在寻找一种方法来使用 Autotools 测试 IBM Informix 库的存在性和可用性 即编辑configure in 我没有使用 Autotools 的经验 所以基本上我是从该
  • 如何doxygen注释Qt属性?

    我想将 Doxygen 注释附加到我的 Q PROPERTY 例如 song h class Song public QObject Q OBJECT private Q PROPERTY QString title READ title
  • Facebook C# SDK 从 V5 迁移到 V6

    我正在尝试从 SDK 的 V5 3 2 迁移到 V6 我有一个 ASP NET 4 0 Canvas 应用程序 我注意到现在不再有 facebook web dll 我以前使用过 并找到了以下信息 gt 删除 Facebook Web dl
  • 使用 Lambda 表达式从字段名称中选择不同的字段

    我需要从数据库表中获取两个字段 使用 linq to sql 检索 一个字段是日期时间 并且是固定字段 另一个字段始终是十进制 但该字段可以不同 该表保存的货币数据每天以不同的货币处理两次 因此可能具有 AM USD PM USD AM E
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 将 CollectionBase 转换为 List 或可用于 Linq 的数据类型

    我正在使用 Aspose 单元格来操作 Excel 电子表格 API 中的类型之一是电子表格中的图片集合 它派生自 CollectionBase 请参阅此链接 http www aspose com documentation net co
  • 在使用 stop_token 等待条件变量_any 时是否需要拥有锁来请求停止?

    在等待条件变量时 更改谓词状态的线程必须拥有锁 因此在唤醒期间不会错过更新 根据文档 这是必要的 即使在使用原子变量时也是如此 不过我不确定是否request stop 已经正确处理了 那么问题是 这两个选项中哪一个是正确且符合标准的呢 j
  • Nunit 测试给出结果 OneTimeSetUp: 未找到合适的构造函数

    我有一个问题 NUnit 告诉我 没有找到合适的构造函数 这是什么原因造成的 我还收到另一条消息 异常没有堆栈跟踪 这两条消息只是一遍又一遍地重复 这是我的代码 TestFixture public class SecurityServic
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正

随机推荐

  • c++工厂模式

    以下是我自己学习设计模式的思考总结 简单工厂模式 简单工厂模式是工厂模式中最简单的一种 他可以用比较简单的方式隐藏创建对象的细节 一般只需要告诉工厂类所需要的类型 工厂类就会返回需要的产品类 但客户端看到的只是产品的抽象对象 无需关心到底是
  • 微信小程序-wxParse插件的使用

    wxParse是一个微信小程序富文本解析组件 现在小程序里面自带了一个
  • golang中定时器ticker

    package main import fmt time func main t time Now Unix 秒时间戳 fmt Println 秒时间戳 t t time Now UnixMilli 毫秒 fmt Println 毫秒时间戳
  • TypeError: can‘t unbox heterogeneous list: int64 = float64

    TypeError can t unbox heterogeneous list int64 float64 使用 numba 加速程序的时候 可能会报这个错误 一般的原因是因为某个list 里面的元素存在多种数据类型 比如同时存在 int
  • C/C++中判断某一文件或目录是否存在

    C C 中判断某一文件或目录是否存在 1 C 很简单的一种办法 include lt iostream gt include lt fstream gt using namespace std define FILENAME stat da
  • stm32 DMA2D使用中断LVGL,提高LVGL帧率

    我看了很多DMA2D教程都是用阻塞方式来刷新屏 这样就消耗了性能 相当于没用DMA 所以我使用DMA2D中断来传输数据 测试平台 stm32f429 正点原子7寸1024x600液晶屏 45MHZ刷新率 LVGL 公有条件 LTDC刷新率4
  • 2023年清洁能源与智能电网国际会议(CCESG 2023)

    会议简介 Brief Introduction 2023年清洁能源与智能电网国际会议 CCESG 2023 会议时间 2023年 召开地点 中国南宁 大会官网 CCESG 2023 2023 International Joint Conf
  • T+0交易与结算

    T 0交易 T 0交易制度 是指 投资者当天卖出股票获得的资金在当天就可以买入股票 当天买入的股票在当天就可以卖出 的一种证券交易机制 实际上 T 0交易是我国证券市场参与者之间的一种通俗叫法 正式名称为 当日回转交易 在 上海证券交易所交
  • ssm109基于jsp的网上手机商城+jsp

    文章仅展示部分内容 详细的毕设论文和演示视频可以私信我的扣扣 毕业设计 论文 网上手机商城 学 院 专 业 班 级 学 号 用户姓名 指导教师 完成日期 年 月 日 摘 要 随着科学技术的飞速发展 各行各业都在努力与现代先进技术接轨 通过科
  • 封神台——BurpSuite入门(改包、爆破)

    点击传送门进来看到的就是一个很简陋的网站 我们来到一个网站就先注册一下 感受一下全面的服务 一个假网做的还挺完备 点击一个产品 看到他的设计如此之烂 什么也没有居然要价5400 很多购物网站都存在着支付漏洞 于是我们抓个包试试看 首先打开B
  • 毕业设计-基于计算机视觉技术的指针式仪表智能识别系统

    目录 前言 课题背景和意义 实现技术思路 一 方法设计 二 表盘定位方法 二 表盘定位方法 三 CTPN CRNN网络读取数值与位置 四 示数识别模块 五 实验与分析 六 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一
  • 异步查询如何做节流(只查询时间段最后一次)

    要实现异步查询的节流 只查询时间范围内的最后一次 可以使用一个定时器来延迟执行查询操作 并在每次触发查询时取消之前的定时器 这样 只有在一定时间内没有新的查询请求时 才会执行最后一次查询 以下是一个示例的JavaScript代码实现 let
  • msq安装及其密码修改

    mysql 8 0安装与使用 不需要配置my ini 1 去官网下载mysql 8 0 https dev mysql com downloads mysql 8 0 html 解压版mysql 2 直接解压 配置path路径 配置系统环境
  • 常用邮箱服务器(SMTP,POP3)地址

    常用邮箱SMTP服务器地址大全 谷歌邮箱 google com POP3服务器地址 pop gmail com SSL启用端口 995 SMTP服务器地址 smtp gmail com SSL启用端口 587 新浪邮箱 sina com P
  • JUC(java中的多线程)

    JUC 介绍 JUC是jdk中java util concurrent包的简称 该包提供了并发编程中常用的工具类 概括地说 JUC的就 是java并发编程工具包 目前juc泛指Java多线程开发技术 线程和进程 进程 运行中的程序 一个进程
  • 计算机把C盘无法扩展,c盘不能扩展卷【解决教程】

    喜欢使用电脑的小伙伴们一般都会遇到win7系统c盘不能扩展卷的问题 突然遇到win7系统c盘不能扩展卷的问题就不知道该怎么办了 其实win7系统c盘不能扩展卷的解决方法非常简单 按照 1 打开计算机页面选择计算机使用鼠标右键单击弹出下拉菜单
  • 目前身体现状

    突出特点 易疲劳 走路易累 高度怕冷 畏寒 易头昏 睡觉后无精神感 久睡有濒死感 记忆力有减退现象 只是感觉 久坐腰背痛 尤其坐长途车 年轻时不会
  • 手把手带你修复老照片

    你家里是否有很多带着故事的老照片呢 随着时间的流逝 这些照片难免会变模糊 或者有了划痕 今天给大家介绍一种使用程序修复老照片的方法 教程面向小白 对于有基础的人过程可能略显繁琐 修复效果如下图所示 我们需要在电脑中下载安装程序运行环境 修复
  • 【学习笔记】电机学

    电枢的感生电动势 E a C e n
  • C++Primer(第五版 )第十一章 关联容器 章节编程练习答案

    11 1 描述map和vector的不同 答 map 是关联容器 vector 是顺序容器 11 2 分别给出最适合使用list vector deque map以及set的例子 答 list 双向链表 适合频繁插入删除元素的场景 vect