《C++ Primer Plus》(第6版)第18章编程练习

news2024/11/24 14:45:43

《C++ Primer Plus》(第6版)第18章编程练习

  • 《C++ Primer Plus》(第6版)第18章编程练习
    • 1. 函数average_list()
    • 2.
    • 3. sum_value()
    • 4. 使用lambda重新编写程序清单16.15

《C++ Primer Plus》(第6版)第18章编程练习

1. 函数average_list()

下面是一个简短程序的一部分:

int main()
{
    using namespace std;
    // list of double deduced from list contents
    auto q = average_list({15.4, 10.7, 9.0});
    cout << q << endl;
    // list of int deduced from list contents
    cout << average_list({20, 30, 19, 17, 45, 38} ) << endl;
    // forced list of double
    auto ad = average_list<double>({'A', 70, 65.33});
    cout << ad << endl;
    return 0;
}

请提供函数average_list(),让该程序变得完整。它应该是一个模板函数,其中的类型参数指定了用作函数参数的initializer_list模板的类型以及函数的返回类型。

程序:

#include <iostream>
#include <initializer_list>
#include <algorithm>
using namespace std;

template <typename T>
T average_list(initializer_list<T> l);

int main()
{
    // list of double deduced from list contents
    auto q = average_list({15.4, 10.7, 9.0});
    cout << q << endl;
    // list of int deduced from list contents
    cout << average_list({20, 30, 19, 17, 45, 38}) << endl;
    // forced list of double
    auto ad = average_list<double>({'A', 70, 65.33});
    cout << ad << endl;

    system("pause");
    return 0;
}

template <typename T>
T average_list(initializer_list<T> l)
{
    T sum = 0;
    if (l.size() == 0)
        return 0;
    for_each(l.begin(), l.end(), [&sum](T t) { sum += t; });
    return sum / l.size();
}

运行结果:

在这里插入图片描述

2.

下面是类Cpmv的声明:

class Cpmv
{
public:
    struct Info
    {
        std::string qcode;
        std::string zcode;
    };

private:
    Info *pi;

public:
    Cpmv();
    Cpmv(std::string q, std::string z);
    Cpmv(const Cpmv &cp);
    Cpmv(Cpmv &&mv);
    ~Cpmv();
    Cpmv &operator=(const Cpmv &cp);
    Cpmv &operator=(Cpmv &&mv);
    Cpmv operator+(const Cpmv &obj) const;
    void Display() const;
};

函数operator+()应创建一个对象,其成员qcode和zcode有操作数的相应成员拼接而成。请提供为移动构造函数和移动赋值运算符实现移动语义的代码。编写一个使用所有这些方法的程序。为方便测试,让各个方法都显示特定的内容,以便知道它们被调用。

程序:

#include <iostream>
#include <string>
using namespace std;

class Cpmv
{
public:
    struct Info
    {
        string qcode;
        string zcode;
    };

private:
    Info *pi;

public:
    Cpmv();
    Cpmv(string q, string z);
    Cpmv(const Cpmv &cp);
    Cpmv(Cpmv &&mv);
    ~Cpmv();
    Cpmv &operator=(const Cpmv &cp);
    Cpmv &operator=(Cpmv &&mv);
    Cpmv operator+(const Cpmv &obj) const;
    void Display() const;
};

int main()
{
    Cpmv c1;
    Cpmv c2("abc", "123");
    Cpmv c3(c2);
    c1 = c2;
    c1.Display();
    Cpmv c4(move(c1));
    c4.Display();
    Cpmv c5;
    c5 = move(c2);
    c5.Display();
    Cpmv c6("abc", "123");
    Cpmv c7("def", "456");
    Cpmv c8 = c6 + c7;
    c8.Display();

    system("pause");
    return 0;
}

Cpmv::Cpmv()
{
    pi = new Info;
    pi->qcode = "";
    pi->zcode = "";
    cout << "Cpmv() called.\n";
}

Cpmv::Cpmv(string q, string z)
{
    pi = new Info;
    pi->qcode = q;
    pi->zcode = z;
    cout << "Cpmv(string q, string z) called.\n";
}

Cpmv::Cpmv(const Cpmv &cp)
{
    pi = new Info;
    pi->qcode = cp.pi->qcode;
    pi->zcode = cp.pi->zcode;
    cout << "Cpmv(const Cpmv &cp) called.\n";
}

Cpmv::Cpmv(Cpmv &&mv)
{
    pi = mv.pi;
    mv.pi = nullptr;
    cout << "Cpmv(Cpmv &&mv) called.\n";
}

Cpmv::~Cpmv()
{
    delete pi;
    cout << "~Cpmv()  called.\n";
}

Cpmv &Cpmv::operator=(const Cpmv &cp)
{
    cout << "Cpmv &operator=(const Cpmv &cp) called.\n";
    if (this == &cp)
        return *this;
    delete pi;
    pi = new Info;
    pi->qcode = cp.pi->qcode;
    pi->zcode = cp.pi->zcode;
    return *this;
}

Cpmv &Cpmv::operator=(Cpmv &&mv)
{
    cout << "Cpmv &operator=(Cpmv &&mv) called.\n";
    if (this == &mv)
        return *this;
    delete pi;
    pi = mv.pi;
    mv.pi = nullptr;
    return *this;
}

Cpmv Cpmv::operator+(const Cpmv &obj) const
{
    cout << "Cpmv operator+(const Cpmv &obj) const called.\n";
    Cpmv cv;
    cv.pi->qcode = pi->qcode + obj.pi->qcode;
    cv.pi->zcode = pi->zcode + obj.pi->zcode;
    return cv;
}

void Cpmv::Display() const
{
    cout << "The qcode is " << pi->qcode << endl;
    cout << "The zcode is " << pi->zcode << endl;
}

运行结果:

在这里插入图片描述

3. sum_value()

编写并测试可变参数模板函数sum_value( ),它接受任意长度的参数列表(其中包含数值,但可以是任何类型),并以long double的方式返回这些数值的和。

程序:

在这里插入代码片

运行结果:

4. 使用lambda重新编写程序清单16.15

使用lambda重新编写程序清单16.15。具体地说,使用一个有名称的lambda替换函数outint( ),并将函数符替换为两个匿名lambda表达式。

程序:

在这里插入代码片

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql进阶-查询优化-慢查询日志

文章目录 一、什么是慢查询日志二、慢查询日志能干什么2.1 性能分析和优化2.2 诊断和排查问题2.3 数据分析和探索 三、慢查询日志实战3.1 永久开启开启慢查询日志3.2 临时开启慢查询日志3.4 常用命令 四、如何分析慢查询日志五、优化慢查询语句五、总结 一、什么是慢查询日志 …

这场SIG组开放工作会议为何吸引了那么多人的关注?

【中国&#xff0c;上海&#xff0c;2023年4月20日-21日】openEuler Developer Day 2023在线上和线下同步举办。本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#xff0c;以“万涓汇流&#xff0c;奔涌向前”为主题…

数据仓库与数据库之间的区别与联系

文章目录 一、数据库与数据仓库的区别 1.1、区别 1.2、ACID内容 二、原子性&#xff08;Atomicity&#xff09; 三、持久性&#xff08;Durability&#xff09; 四、隔离性&#xff08;Isolation&#xff09; 1、锁机制 2、脏读、不可重复读和幻读 2、事务隔离级别 五…

权限提升:溢出漏洞.(普通权限 提升 管理员权限.)

权限提升&#xff1a;溢出漏洞 权限提升简称提权&#xff0c;由于操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;比如通过 Web 漏洞拿到的是 Web 进程的权限&#xff0c;往往 Web 服务都是以一个权限很低的账号启动的&#xff0c;因此通过 Webshell …

日增百亿数据,查询结果秒出, Apache Doris 在 360商业化的统一 OLAP 应用实践

导读&#xff1a; 360商业化为助力业务团队更好推进商业化增长&#xff0c;实时数仓共经历了三种模式的演进&#xff0c;分别是 Storm Druid MySQL 模式、Flink Druid TIDB 的模式 以及 Flink Doris 的模式&#xff0c;基于 Apache Doris 的新一代架构的成功落地使得 360商…

“不幸的是,你知道的太多了”

《平凡的世界》里有一段话是这么说的&#xff1a;“谁让你读了这么多书&#xff0c;又知道了双水村以外还有个大世界。 如果从小你就在这个天地里日出而作&#xff0c;日落而息&#xff0c;那你现在就会和众乡亲抱同一理想&#xff0c;经过几年的辛劳&#xff0c;像大哥一样娶…

PHP 实现会话Session信息共享

目录 解决方案也有很多种&#xff1a; 会话保持 会话复制 会话共享 环境准备 架构设计 SessionHandlerInterface接口 代码编写 总结 优化 前言&#xff1a; 小流量的网站中&#xff0c;我们往往只需要一台服务器就可以维持用户正常的访问以及相关的操作。 随着网站的…

Superset整合keycloak系统

本篇主要介绍superset如何整合单点登陆系统keycloak&#xff0c;现在网上的博客大部分都是失效了&#xff0c;这里我相当于更新一下&#xff0c;避免大家再走弯路 一、环境配置 Macos keycloak&#xff1a;18.0.0 superset&#xff1a;2.1.0 keycloak规定&#xff1a;每一…

原理这就是索引下推呀

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 索引下推是之前面试的时候遇到的一个面试题&#xff0c;当时没有答上来&#xff0c;今天来学习一下。 介绍索引下推之前先看一下MySQL基…

2022年NOC大赛创客智慧编程赛道图形化scratch复赛题,包含答案解析

目录 2022 年 NOC 大赛创客智慧编程图形化复赛用题 下载文档打印做题:

ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局

第一章、生态安全评价理论及方法介绍 一、生态安全评价简介 ​ 二、生态服务能力简介 ​ 三、生态安全格局构建研究方法简介 ​ 第二章、平台基础一、ArcGIS Pro介绍1. ArcGIS Pro简介2. ArcGIS Pro基础3. ArcGIS Pro数据编辑4. ArcGIS Pro空间分析5. 模型构建器6. ArcGIS Pro…

命令执行的判断根据:;、、

文章目录 命令执行的判断根据&#xff1a;;、&&、||cmd ; cmd(不考虑命令相关性的连续命令执行)$?(命令返回值)与&&或||使用案例例题 命令执行的判断根据&#xff1a;;、&&、|| 在某些情况下&#xff0c;我想要一次执行很多命令&#xff0c;而不想分…

【jvm系列-10】深入理解jvm垃圾回收器的种类以及内部的执行原理

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

JavaScript字符串操作

ASCII&#xff08;as key&#xff09; 字符集&#xff08;了解&#xff09; 我们都知道&#xff0c;计算机只能存储 0101010 这样的二进制数字&#xff0c;那么我们的 a ~ z / A ~ Z / $ / /… 之类的内容也有由二进制数字组成的 我们可以简单的理解为&#xff0c; a ~ z / …

浅谈文心一言

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

[oeasy]python0140_导入_import_from_as_namespace_

导入import 回忆上次内容 上次学习了 tryexcept 注意要点 半角冒号缩进输出错误信息 有错就报告 不要隐瞒否则找不到出错位置还可以用traceback把 系统报错信息原样输出 但是代码量好多啊 10多 行了 &#x1f92f;可以把他输入部分和输出部分么&#xff1f;&#x1f914; 我…

【计算机组成原理】第四章 指令系统

系列文章目录 第一章 计算系统概论 第二章 运算方法和运算器 第三章 多层次的存储器 第四章 指令系统 第五章 中央处理器 第六章 总线系统 第七章 外围设备 第八章 输入输出系统 文章目录 系列文章目录前言第四章 指令系统4.1 指令系统的发展与性能要求4.1.1 指令系统的发展4…

CTR-GCN 代码理解

论文代码&#xff1a;https://github.com/Uason-Chen/CTR-GCN ctrgcn.py 文件路径&#xff1a;CTR-GCN/model/ctrgcn.py import math import pdbimport numpy as np import torch import torch.nn as nn from torch.autograd import Variabledef import_class(name):compone…

动态设置图片的主题色(保留明暗关系)

github地址 PrimaryColorDemo 效果 原始图片 就是一张普通的png图片 根据选择的主题色动态渲染。 思考 最近在思考怎么实现动态的设置图片的主题色。不是那种渲染透明iocn。而是把图片的明暗关系保留。而改变其中的主题色。终于花了半天的时间研究出来了。和大家共享。 …

AI对话AI才是正解?KAUST研究团队提出基于角色扮演的大模型交互代理框架CAMEL

电影《盗梦空间》中有这样一句非常经典的台词&#xff1a; “世上最具有可塑性的寄生虫是什么&#xff1f;是人类的想法。人类大脑中一个简单的想法&#xff0c;就可以建立一座庞大的城市。有时一个想法也可以改变世界&#xff0c;并改写一切规则&#xff0c;这就是我为什么要…