当前位置: 首页 > news >正文

C++ Primer第五版_第十六章习题答案(61~67)

文章目录

      • 练习16.61
      • 练习16.62
        • Sales_data.h
        • ex62.cpp
      • 练习16.63
      • 练习16.64
      • 练习16.65
      • 练习16.66
      • 练习16.67

练习16.61

定义你自己版本的 make_shared。

template <typename T, typename ... Args>
auto make_shared(Args&&... args) -> std::shared_ptr<T>
{return std::shared_ptr<T>(new T(std::forward<Args>(args)...));
}

练习16.62

定义你自己版本的 hash<Sales_data>, 并定义一个 Sales_data 对象的 unorder_multise。将多条交易记录保存到容器中,并打印其内容。

Sales_data.h

#ifndef SALES_DATA_H_
#define SALES_DATA_H_#include <string>struct Sales_data;std::istream &operator>>(std::istream &is, Sales_data &item);
std::ostream &operator<<(std::ostream &os, const Sales_data &item);
Sales_data operator+(const Sales_data &lhs, const Sales_data &rhs);struct Sales_data
{
friend std::istream& operator>>(std::istream&, Sales_data&);
friend std::ostream& operator<<(std::ostream&, const Sales_data&);
friend Sales_data operator+(const Sales_data&, const Sales_data&);
friend bool operator==(const Sales_data&, const Sales_data&);
friend class std::hash<Sales_data>;
public:Sales_data(const std::string &s, unsigned n, double p) : bookNo(s), units_sold(n), revenue(p*n){std::cout << "Sales_data(const std::string &s, unsigned n, double p)" << std::endl;}Sales_data() : Sales_data("", 0, 0){std::cout << "Sales_data() : Sales_data(\"\", 0, 0)" << std::endl;}Sales_data(const std::string &s) : Sales_data(s, 0, 0){std::cout << "Sales_data(const std::string &s) : Sales_data" << std::endl;}Sales_data(std::istream &is) : Sales_data(){/*read(is, *this);*/ is >> *this; std::cout << "Sales_data(std::istream &is) : Sales_data()" << std::endl;}std::string isbn() const {return bookNo;}Sales_data& operator=(const std::string&);Sales_data& operator+=(const Sales_data&);Sales_data& operator-=(const Sales_data&);
private:inline double avg_price() const;std::string bookNo;unsigned units_sold = 0;double revenue = 0.0;
};inline double Sales_data::avg_price() const
{if(units_sold)return revenue / units_sold;elsereturn 0;
}Sales_data& Sales_data::operator=(const std::string &s)
{*this = Sales_data(s);return *this;
}Sales_data& Sales_data::operator+=(const Sales_data &rhs)
{units_sold += rhs.units_sold;revenue += rhs.revenue;return *this;
}Sales_data& Sales_data::operator-=(const Sales_data &rhs)
{units_sold -= rhs.units_sold;revenue -= rhs.revenue;return *this;
}std::istream &operator>>(std::istream &is, Sales_data &item)
{double price = 0;is >> item.bookNo >> item.units_sold >> price;if(is)item.revenue = price * item.units_sold;elseitem = Sales_data();return is;
}std::ostream &operator<<(std::ostream &os, const Sales_data &item)
{os << item.isbn() << " " << item.units_sold << " " << item.revenue << " " << item.avg_price();return os;
}Sales_data operator+(const Sales_data &lhs, const Sales_data &rhs)
{Sales_data sum = lhs;sum += rhs;return sum;
}bool operator==(const Sales_data &lhs, const Sales_data &rhs)
{return lhs.isbn() == rhs.isbn() && lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue;
}#endif

ex62.cpp

#include <iostream>
#include <string>
#include "Sales_data.h"
#include <unordered_set>namespace std
{template <>struct hash<Sales_data>{typedef size_t result_type;typedef Sales_data argument_type;size_t operator()(const Sales_data &s) const;};size_t hash<Sales_data>::operator()(const Sales_data &s) const{return hash<std::string>()(s.bookNo) ^ hash<unsigned>()(s.units_sold) ^ hash<double>()(s.revenue);}
}int main()
{Sales_data sales_data1("001-01", 1, 100);Sales_data sales_data2;Sales_data sales_data3("001-02");// Sales_data sales_data4(std::cin);// std::cout << sales_data4 << std::endl;std::cout << std::hex << std::hash<std::string>()("001-01") << std::endl;std::cout << std::hex << std::hash<unsigned>()(1) << std::endl;std::cout << std::hex << std::hash<double>()(100) << std::endl;std::unordered_multiset<Sales_data> SDset;SDset.emplace(sales_data1);SDset.emplace("001-03", 1, 200);SDset.emplace(sales_data3);for(const auto &item : SDset)std::cout << "the hash code of " << item.isbn() <<":\n0x" << std::hex << std::hash<Sales_data>()(item) << "\n";return 0;
}

练习16.63

定义一个函数模版,统计一个给定值在一个vecor中出现的次数。测试你的函数,分别传递给它一个double的vector,一个int的vector以及一个string的vector。

#include <iostream>
#include <vector>
#include <algorithm>template <typename T>
size_t get_number(T t, std::vector<T> const &vt)
{size_t n = 0;auto iter = vt.begin();do{iter = std::find(iter, vt.end(), t);if(iter != vt.end()){++n;++iter;}}while(iter != vt.end());return n;
}size_t get_number(const char* p, const std::vector<std::string> &vt)
{size_t n = 0;auto iter = vt.begin();std::string s(p);do{iter = std::find(iter, vt.end(), s);if(iter != vt.end()){++n;++iter;}}while(iter != vt.end());return n;
}template <>
size_t get_number(const char* t, std::vector<const char*> const &vt)
{size_t n = 0;auto iter = vt.begin();do{iter = std::find(iter, vt.end(), t);if(iter != vt.end()){++n;++iter;}}while(iter != vt.end());return n;
}int main()
{std::vector<double> vd = {1, 2, 3, 3.14, 4, 3.14, 5, 6.28};std::vector<int> vi = {1, 2, 3, 3, 4, 3, 5, 6};std::vector<std::string> vs = {"a", "bb", "ccc", "dddd"};std::vector<const char*> vcp = {"a", "bb", "ccc", "dddd"};std::cout << get_number(3.14, vd) << std::endl;std::cout << get_number(3, vi) << std::endl;std::cout << get_number("a", vs) << std::endl;std::cout << get_number("a", vcp) << std::endl;return 0;
}

练习16.64

为上一题的模版编写特例化版本来处理vector<const char*>。编写程序使用这个特例化版本。

详见16.63。

练习16.65

在16.3节中我们定义了两个重载的 debug_rep 版本,一个接受 const char* 参数,另一个接受 char * 参数。将这两个函数重写为特例化版本。

#include <iostream>
#include <memory>
#include <sstream>template <typename T> 
std::string debug_rep(const T &t);template <typename T> 
std::string debug_rep(T *p);
std::string debug_rep(const std::string &s);template <typename T>
std::string debug_rep(const T &t)
{std::ostringstream ret;ret << t;return ret.str();
}template <typename T>
std::string debug_rep(T *p)
{std::ostringstream ret;ret << "pointer: " << p;if(p)ret << " " << debug_rep(*p);elseret << " null pointer";return ret.str();
}std::string debug_rep(const std::string &s)
{return '"' + s + '"';
}template <>
std::string debug_rep(char *p)
{return debug_rep(std::string(p));
}template <>
std::string debug_rep(const char *p)
{std::cout << "debug_rep(const char *p)" << std::endl;return debug_rep(std::string(p));
}int main()
{char ca[] = {'a', 'b', 'c', '\0'};std::cout << debug_rep(ca) << std::endl;return 0;
}

练习16.66

重载debug_rep 函数与特例化它相比,有何优点和缺点?

会改变函数匹配顺序,几个函数都提供同样好的匹配的情况下,编译器会选择非模板版本。

练习16.67

定义特例化版本会影响 debug_rep 的函数匹配吗?如果不影响,为什么?

不会改变,特例化模板函数不会重载函数,不会影响函数匹配顺序。

相关文章:

C++ Primer第五版_第十六章习题答案(61~67)

文章目录 练习16.61练习16.62Sales_data.hex62.cpp 练习16.63练习16.64练习16.65练习16.66练习16.67 练习16.61 定义你自己版本的 make_shared。 template <typename T, typename ... Args> auto make_shared(Args&&... args) -> std::shared_ptr<T> {r…...

python定时任务2_celery flower计划任务

启动worker&#xff1a; celery -A tasks worker --loglevelerror --poolsolo worker启动成功 启动beat celery -A tasks beat --loglevelinfo beat启动成功 启动flower celery -A tasks flower --loglevelinfo flower启动成功&#xff0c;然后进入http://localhost:5555 可…...

地狱级的字节跳动面试,6年测开的我被按在地上摩擦.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…...

怎么开发外贸网站

随着全球经济的发展&#xff0c;越来越多的企业选择走上国际化的道路&#xff0c;开展国际贸易业务。而外贸网站是一个相对常见的开展国际贸易业务的平台。那么&#xff0c;如何开发一款优秀的外贸网站呢&#xff1f; 首先&#xff0c;我们需要明确外贸网站的目标用户群体。由…...

从 Elasticsearch 到 Apache Doris,10 倍性价比的新一代日志存储分析平台|新版本揭秘

日志数据的处理与分析是最典型的大数据分析场景之一&#xff0c;过去业内以 Elasticsearch 和 Grafana Loki 为代表的两类架构难以同时兼顾高吞吐实时写入、低成本海量存储、实时文本检索的需求。Apache Doris 借鉴了信息检索的核心技术&#xff0c;在存储引擎上实现了面向 AP …...

H5 + C3基础(H5语义化标签 多媒体标签 新表单标签)

H5语义化标签 & 多媒体标签 & 新表单标签 H5语义化标签多媒体标签新表单标签新表单标签属性 H5语义化标签 以下常用标签均为块级元素 &#xff1a;带有语义的 div headernavsectionarticleasidefooter 多媒体标签 video mp4格式一般浏览器都支持&#xff0c;没办法…...

低代码平台选择指南:如何选出最适合你的平台?

低代码平台是一种新兴的软件开发工具&#xff0c;它们提供了一个简单易用的界面来设计、开发和部署应用程序&#xff0c;使用者无需编写复杂的代码。近年来&#xff0c;随着云计算和数字化转型的高速发展&#xff0c;越来越多的企业开始探索低代码平台以加快应用程序的开发速度…...

软考A计划-重点考点-专题十二(JAVA程序设计)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…...

亚马逊云科技工业数据湖解决方案,助力企业打通各业务场景数据壁垒

数字化浪潮蓬勃发展&#xff0c;制造行业数字化转型热度迭起&#xff0c;根据麦肯锡面向全球400多家制造型企业的调研表明&#xff0c;几乎所有细分行业都在大力推进数字化转型&#xff0c;高达94%的受访者都称&#xff0c;数字化转型是他们危机期间维持正常运营的关键。 数字…...

修改lib64/l.ibc.so6导致系统命令都不能用

问题&#xff1a;想升级libc-2.12.so到libc2.17&#xff0c;拷贝了一个libc2.17到lib64下&#xff0c;然后建立软连接到l.ibc.so6&#xff0c;导致系统除了cd之类的命令&#xff0c;其他都不能使用 报错&#xff1a;relocation error: /usr/lib64/libc.so.6: symbol _dl_start…...

Web(一)-- 创建一个简单的Web项目(idea 2022版)

目录 1. 在idea里面点击文件-新建-项目 2. 新建项目-更改名称为自己想要的项目名称-创建...

前一篇文章最后一个算法校正

前一篇文章最后一个算法的实现有一点问题&#xff0c;问题原因来自python中list删除数据会导致数据前移&#xff0c;针对这个特性目前没有一个很好的解决方案&#xff0c;所以在这里使用另外一个角度去实现&#xff0c;即将报到9的人编号置为0&#xff0c;在下次喊的时候&#…...

测试外包干了4年,我废了...

这是来自一位粉丝的投稿内容如下&#xff1a; 先说一下自己的个人情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某外包公司&#xff0c;干了接近4年的软件测试外包工作&#xff0c;马上2023年秋招了&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在…...

CPU组成元素:运算器+控制器

目录标题 一、计算机硬件组成概述&#xff08;Introduction to Computer Hardware Components&#xff09;1.1 计算机系统的基本构架&#xff08;Basic Architecture of Computer Systems&#xff09;1.2 CPU的组成1.3运算器&#xff08;Arithmetic Unit&#xff09;、控制器&a…...

计算机网络——主机IP地址、子网掩码、广播地址、网络数、主机数计算方法

目录 一、概念 1.1 主机IP地址 1.2 子网掩码 1.3 广播地址 1.4 子网划分 二、计算 2.1 已知IP地址和子网掩码&#xff0c;计算网络地址和主机地址&#xff1a; 2.2 已知IP地址和子网掩码&#xff0c;计算广播地址&#xff1a; 2.3 已知子网掩码&#xff0c;计算主机数…...

Unity 后处理(Post-Processing) -- (1)概览

在Unity中&#xff0c;后处理&#xff08;Post-Processing&#xff09;是在相机所捕捉的图像上应用一些特殊效果的过程&#xff0c;后处理会让图像视觉效果更好&#xff08;前提是做的好&#xff09;。 这些效果的范围有非常细微的颜色调整&#xff0c;也包括整体的美术风格的大…...

Ajax + axios + 常用状态码(笔记)

Ajax 求关注&#x1f62d; 一、客户端与服务器相关的概念 1.1 客户端与服务器 1.1.1 服务器 服务器&#xff1a; 负责 存放 和 对外提供 资源 的 电脑本质&#xff1a; 就是一台电脑&#xff0c;只不过 性能 要比别的电脑 高 1.1.2 客户端 客户端&#xff1a; 在上网过程…...

python运算符

本章目的在于帮助大家了解 python中的常用的 算数运算符和赋值运算符 其实 算数运算符就是一些简单运算公式 我们可以编写代码如下 print("1 1 ",11) print("2 - 1 ",2 - 1) print("3 * 3 ",3 * 3) print("4 / 2 ",4 / 2) print(&…...

Python 列表(List)

Python中的列表(List)是一种有序的集合&#xff0c;可以包含任意数量的元素&#xff0c;元素可以是数字、字符串或其他对象&#xff0c;甚至包含其他列表。 以下是一些常见的列表操作&#xff1a; 1. 创建列表&#xff1a; 要创建一个列表&#xff0c;可以使用方括号 [] 将元…...

Java设计模式-装饰模式

简介 装饰模式在Java领域是一种常见的设计模式&#xff0c;它能够在不改变对象原有结构的情况下&#xff0c;动态地为对象添加新的功能。它通过封装原有对象&#xff0c;在运行时动态地为对象添加新的行为或者修改原有行为&#xff0c;以扩展对象的功能。这种方式避免了继承的…...

基于Arduino与应变片传感器的高精度厨房电子秤DIY全攻略

1. 项目概述&#xff1a;用Arduino打造一台高精度厨房电子秤作为一个喜欢在厨房里折腾的硬件爱好者&#xff0c;我经常遇到需要精确称量食材的场合。市面上的电子秤要么精度不够&#xff0c;要么价格不菲&#xff0c;要么功能单一。于是&#xff0c;我萌生了自己动手做一台的想…...

SSE 基础知识

SSE 基础知识 一、概念定义 SSE 全称 Server-Sent Events&#xff0c;是基于HTTP协议的服务器单向数据推送技术。 建立一次长连接后&#xff0c;服务端可主动持续向前端推送数据&#xff0c;无需客户端反复轮询请求。 二、核心特点 单向通信&#xff1a;仅服务器 → 客户端发送…...

Onekey终极指南:如何5分钟快速获取Steam游戏清单的免费神器

Onekey终极指南&#xff1a;如何5分钟快速获取Steam游戏清单的免费神器 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏清单下载而头疼吗&#xff1f;想要备份游戏资源却不…...

Unity发行版DLL调试实战:DnSpy无源码IL级断点指南

1. 这不是“反编译”&#xff0c;而是Unity游戏开发者的日常调试手段你有没有遇到过这样的情况&#xff1a;接手一个Unity发行版游戏&#xff0c;想快速验证某个功能逻辑是否按预期执行&#xff0c;或者排查一个偶发的崩溃&#xff0c;但手头只有打包后的Assembly-CSharp.dll&a…...

科华UPS电源全品类汇总:选型与场景适配指南

科华UPS电源作为国内智慧电能领域的主流产品&#xff0c;覆盖家用、办公、机房、工业等全场景&#xff0c;产品系列丰富、规格齐全&#xff0c;但多数用户在选型时&#xff0c;常因分不清系列差异、功率适配、架构类型而踩坑。本文系统汇总科华UPS电源的核心分类、主流系列、核…...

从零到上机:我的第一个Quest 3空间锚点应用是如何跑起来的(附完整Unity工程)

从零到上机&#xff1a;我的第一个Quest 3空间锚点应用是如何跑起来的&#xff08;附完整Unity工程&#xff09;第一次戴上Meta Quest 3时&#xff0c;那种虚拟与现实交织的震撼感至今难忘。但作为开发者&#xff0c;更让我着迷的是如何让虚拟物体在真实空间中"记住"…...

车载诊断系统(OBD)的原理、演进与未来

本文约8,167字&#xff0c;建议收藏阅读 作者 | 北湾南巷 出品 | 汽车电子与软件 引 言 在现代汽车中&#xff0c;越来越多的故障不再表现为明显的机械损坏&#xff0c;而是以“亮灯”“报码”“性能异常”等电子信号的形式出现。发动机为什么亮起故障灯&#xff1f;排放是否达…...

我们公司全员把 Cursor 换成了自研的 全开源AtomCode

【引子】这是一篇实录——一位 CTO 用 28 天,用 Claude GLM 双模型调度,造出了一个让全公司放弃 Cursor 的工具。然后我意识到我们正在经历的事情,比"换工具"大得多。【读者承诺】接下来 15 分钟,你会拿到三件东西:一个真实案例(28 天 1,146 commits 是怎么做出来的…...

别再瞎拖拽了!Unity Prefab从创建到批量修改的保姆级工作流(含变体与嵌套实战)

Unity Prefab高效工作流&#xff1a;从创建到批量修改的实战指南在Unity项目开发中&#xff0c;Prefab&#xff08;预制体&#xff09;是最基础也最强大的工具之一。但很多开发者&#xff0c;尤其是初学者&#xff0c;往往停留在简单的"拖拽-修改"阶段&#xff0c;没…...

怎么理解Filter不是在afterCompetition里面remove掉ThreadLocal里面的东西,而是说在finally块里面remove

文章目录1. 核心原因&#xff1a;Filter 的“套娃&#xff08;洋葱圈&#xff09;”执行模型2. 为什么不能&#xff08;也无法&#xff09;在这里用 afterCompletion&#xff1f;维度一&#xff1a;Filter 拿不到 afterCompletion维度二&#xff1a;生命周期顺序的致命冲突总结…...