C++ Primer 中文版(第 5 版)- 第四单元

第四单元

练习 4.1

编写一段程序,使用条件运算符从vector中找到哪些元素的值是奇数,然后将这些奇数值翻倍。

#include <iostream>
#include <vector>using std::cout;
using std::endl;
using std::vector;int main()
{vector<int> ivec{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };for (auto &i : ivec){cout << ((i & 0x1) ? i * 2 : i) << " ";}cout << endl;return 0;
}
练习 4.2

将成绩划分为high pass、pass 和 fail 三种,扩展该程序使其进一步将 60 分到 75 分之间的成绩设定为low pass。要求程序包含两个版本:一个版本只使用条件运算符;另一个版本使用1个或多个if语句。

#include <iostream>
using std::cout; using std::cin; using std::endl;int main()
{for (unsigned g; cin >> g;){auto result = g > 90 ? "high pass" : g < 60 ? "fail" : g < 75 ? "low pass" : "pass";cout << result << endl;// -------------------------if (g > 90)         cout << "high pass";else if (g < 60)    cout << "fail";else if (g < 75)    cout << "low pass";else                cout << "pass";cout << endl;}return 0;
}

在C++11引入的关键字auto用于进行类型推导,即根据变量的初始化表达式自动推断变量的类型。使用auto关键字可以简化代码并提高代码的可读性

auto i = 10;    // 推导为int类型
auto d = 3.14;  // 推导为double类型
auto c = 'A';   // 推导为char类型int x = 42;
auto* ptr = &x;     // 推导为int*类型
auto& ref = x;      // 推导为int&类型
const auto& cref = x;  // 推导为const int&类型std::vector<int> vec = {1, 2, 3};
auto v = vec;     // 推导为std::vector<int>类型auto sum = 2 + 3.14;     // 推导为double类型
auto result = func();    // 推导为func()返回值的类型
练习 4.3

编写一段程序,输出每一种内置类型所占空间的大小。

#include <iostream> using namespace std;int main()
{cout << "bool:\t\t" << sizeof(bool) << " bytes" << endl << endl;cout << "char:\t\t" << sizeof(char) << " bytes" << endl;cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes" << endl;cout << "char16_t:\t" << sizeof(char16_t) << " bytes" << endl;cout << "char32_t:\t" << sizeof(char32_t) << " bytes" << endl << endl;cout << "short:\t\t" << sizeof(short) << " bytes" << endl;cout << "int:\t\t" << sizeof(int) << " bytes" << endl;cout << "long:\t\t" << sizeof(long) << " bytes" << endl;cout << "long long:\t" << sizeof(long long) << " bytes" << endl << endl;cout << "float:\t\t" << sizeof(float) << " bytes" << endl;cout << "double:\t\t" << sizeof(double) << " bytes" << endl;cout << "long double:\t" << sizeof(long double) << " bytes" << endl << endl;return 0;
}
输出:bool:		1 byteschar:		1 bytes
wchar_t:	4 bytes
char16_t:	2 bytes
char32_t:	4 bytesshort:		2 bytes
int:		4 bytes
long:		8 bytes
long long:	8 bytesfloat:		4 bytes
double:		8 bytes
long double:	8 bytes
练习 4.4

解释下面这个循环的含义。

constexpr int size = 5;
int ia[size] = { 1, 2, 3, 4, 5 };
for (int *ptr = ia, ix = 0;ix != size && ptr != ia+size;++ix, ++ptr) { /* ... */ }

解:
这个循环在遍历数组ia,指针ptr和整型ix都是起到一个循环计数的功能。

练习 4.5

用命名的强制类型转换改写下列旧式的转换语句。

int i; double d; const string *ps; char *pc; void *pv;
(a) pv = (void*)ps;
(b) i = int(*pc);
(c) pv = &d;
(d) pc = (char*)pv;

解:

(a) pv = static_cast<void*>(const_cast<string*>(ps));
(b) i = static_cast<int>(*pc);
(c) pv = static_cast<void*>(&d);
(d) pc = static_cast<char*>(pv);

static_cast:
通常来讲,编译器隐式执行的任何类型转换均可以由static_cast显式完成。static_cast能够用来将枚举类型转换成整型,或者整型转换成浮点型。也能够用来将指向父类的指针转换成指向子类的指针。作这些转换前,你必须肯定要转换的数据确实是目标类型的数据,由于static_cast不作运行时的类型检查以保证转换的安全性。也所以,static_cast不如dynamic_cast安全。对含有二义性的指针,dynamic_cast会转换失败,而static_cast却直接且粗暴地进行转换,这是很是危险的。ios
还有要注意的是,他不能转换掉expression的const、volatile、或者__unaligned属性,一样也不能用来去掉static属性。C++中的static_cast执行非多态的转换,用于代替C中一般的转换操做。对于咱们的static_cast转换符,他不只能够应用到指针和引用上,并且还能够应用到基础数据结构和对象上。

#include <iostream>
using namespace std;int main()
{char a = 'c';int b = static_cast<int>(a);char c = static_cast<char>(b);cout<<"a= "<<a<<endl;cout<<"b= "<<b<<endl;cout<<"c= "<<c<<endl;char* pa = &a;int *pb = (int*)pa;//int *pb = static_cast<int*>(pa);   //error//pa = static_cast<char*>(pb);   //errorchar *pc = (char*)pb;//char *pc = static_cast<char*>(pb);  //errorcout<<"pa= "<<pa<<endl;cout<<"pb= "<<pb<<endl;cout<<"pc= "<<pc<<endl;void *pd = static_cast<void*>(pa);int *pe = static_cast<int*>(pd);char *pf = static_cast<char*>(pd);cout<<"pd= "<<pd<<endl;cout<<"pe= "<<pe<<endl;cout<<"pf= "<<pf<<endl;system("pause");return 0;
}

static_cast经常使用来进行基本类型直接的转换,如char与int、int与float、enum与int之间;spa
static_cast也能够转换用户自定义类型,但目标类型必须含有相应的构造函数;3d
static_cast还能够转换对象的指针类型,但它不进行运行时类型检查,因此是不安全的;指针
static_cast甚至能够把任何表达式都转换成void类型;
satic_cast不能移除变量的const属性,请参考const_cast操做符;
static_cast进行的是简单粗暴的转换,因此其正确性彻底由程序员本身保证。

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

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

相关文章

论文《Deep graph tensor learning for temporal link prediction》阅读

论文《Deep graph tensor learning for temporal link prediction》阅读 论文概况IntroductionRelated work动态图表示学习图张量表示 Preliminary张量生成建模 深度图张量学习模型A.基于图紧凑的空间表示B.时间模式表示C.时空特征聚合D.损失函数 实验数据集对比实验消融实验参…

美易官方:美国房地产贷款逾期率飙升,银行业危机仍可控?现货黄金暂守2360

美国房地产贷款逾期率飙升&#xff0c;银行业危机仍可控&#xff1f;现货黄金暂守2360 近年来&#xff0c;美国房地产市场一直处于波动之中&#xff0c;尤其是商业房地产领域。近期&#xff0c;美联储发出警告&#xff0c;称商业房地产贷款逾期率持续攀升&#xff0c;银行正在为…

鸿蒙ArkUI开发:常用布局【交叉轴】

交叉轴 垂直于主轴方向的轴线。Row容器交叉轴为纵向&#xff0c;Column容器交叉轴为横向。通过alignItems属性设置子元素在交叉轴&#xff08;排列方向的垂直方向&#xff09;上的对齐方式alignSelf属性用于控制单个子元素在容器交叉轴上的对齐方式&#xff0c;其优先级高于al…

M 有效算法

M 有效算法 本题考验二分知识&#xff0c;思路是二分k的取值&#xff0c;就按第一组样例来说当我们k取值为1的时候我们遍历数组想让|8-x|<k1的话x的取值范围是7-9&#xff0c;想让|3-x|<k2的话x的取值范围是1-5&#xff0c;两者x的区间不重合&#xff0c;说明肯定没有x能…

【力扣】164. 最大间距

164. 最大间距 题目描述 给定一个无序的数组 nums&#xff0c;返回 数组在排序之后&#xff0c;相邻元素之间最大的差值 。如果数组元素个数小于 2&#xff0c;则返回 0。 您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。 示例 1: 输入: nums [3,6,9,…

几种ssh自动登录服务器的方法

一、Windows环境 1. 配置公钥和私钥 https://developer.aliyun.com/article/1132156 2. 使用putty.exe 官网见&#xff1a;https://www.putty.org/ 下载地址&#xff1a;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 使用示例如下&#xff1a; echo of…

BGP—边界网关协议

BGP 动态路由协议可以按照工作范围分为IGP以及EGP。IGP工作在同一个AS内&#xff0c;主要用来发现和计算路由&#xff0c;为AS内提供路由信息的交换&#xff1b;而EGP工作在AS与AS之间&#xff0c;在AS间提供无环路的路由信息交换&#xff0c;BGP则是EGP的一种。 BGP是一…

打开深度学习的锁:(0)什么是神经网络?有哪些必备的知识点准备?

PS&#xff1a;每每温故必而知新 什么是神经网络&#xff1f; 一、一个单神经元的神经网络二、多个单神经元的神经网络三、到底什么是机器学习&#xff1f;&#xff08;重点&#xff09;1&#xff1a;什么是机器学习的训练&#xff1f;2&#xff1a;什么是模型&#xff1f;权重…

接口测试全流程扫盲..

一.为什么要做接口测试&#xff1f; ①.越底层发现bug&#xff0c;它的修复成本是越低的。 ②.前端随便变&#xff0c;接口测好了&#xff0c;后端不用变&#xff0c;前后端是两拨人开发的。 ③.检查系统的安全性、稳定性&#xff0c;前端传参不可信&#xff0c;比如京东购物…

拉链表实现过程+案例

第一种 1.从ODS层获取增量数据(上一天新增和更新的数据) 2.拿着DWD原始拉链表数据 left join 增量数据 ,修改原始拉链中历史数据的结束时间 3.拿着left join 的结果集 union all 增量数据 4.把最新的拉链数据优先保存到DWD对应的临时表中 5.使用insertselect 方式把临时表中…

数据结构入门 时间 空间复杂度解析

一. 算法效率 算法效率分析分为两种&#xff1a;第一种是时间效率&#xff0c;第二种是空间效率。 时间效率被称为时间复杂度&#xff0c;而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度&#xff0c;而空间复杂度主要衡量一个算法所需要的额外空间&am…

哈希重要思想——位图详解

一&#xff0c;概念 所谓位图&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 为了方便理解我们引入一道面试题&#xff0c; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无…

redis试题按知识点归类(二)

六、性能优化 1.如何对 Redis 进行性能监控&#xff1f; (1)Redis 自带监控命令 使用 INFO 命令获取服务器的详细信息&#xff0c;包括角色、角色具体信息、服务器不同部分的统计数据等。使用 SLOWLOG 命令来管理和监控慢查询。 (2)第三方监控工具&#xff1a; Redis Desk…

Python3 笔记:二进制的转换

十进制是逢十进一&#xff0c;二进制就是逢二进一。 十进制里最大的数字是9&#xff0c;二进制里最大的数字是1。 11010010001000010000010000001000000010^0110^11010^210010^3100010^41000010^510000010^6100000010^7100000002^012^122^242^382^4162^5322^6642^7128 1、十进…

ES扩缩容

ES扩容 1.1 页面扩容ES1 1.2 拷贝插件及ssl文件 JSON [ec_admin@kde-offline3 ~]$ sudo rsync -avP /usr/kde_ec/2.3.6.6-1/elasticsearch1/plugins/* kde-offline6:/usr/kde_ec/2.3.6.6-1/elasticsearch1/plugins/ ;echo $? [ec_admin@kde-offline3 ~]$ sudo rsync -avP /us…

洛谷 P2657 [SCOI2009] windy 数 题解 数位dp

[SCOI2009] windy 数 题目背景 windy 定义了一种 windy 数。 题目描述 不含前导零且相邻两个数字之差至少为 2 2 2 的正整数被称为 windy 数。windy 想知道&#xff0c;在 a a a 和 b b b 之间&#xff0c;包括 a a a 和 b b b &#xff0c;总共有多少个 windy 数&…

关于vue项目中动态引入图片作为背景图遇到的问题

vue项目中如果需要动态的引入图片作为背景图 vue2项目 图片资源已知&#xff0c;在指定条件下渲染出来。可以使用import或者require // html部分 <div class"icon" :style"{background: url(imgSrc), backgroundSize: 100% 100%}"></div>//…

【Python探索之旅】初识Python

目录 发展史&#xff1a; 环境安装&#xff1a; 入门案例&#xff1a; 变量类型 标准数据类型 数字类型&#xff1a; 字符串&#xff1a; 全篇总结&#xff1a; 前言&#xff1a; Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设…

GEE数据集——东南亚区域油棕种种植分布(油棕榈树种植园的概率)数据集

森林数据伙伴关系围绕对全球商品驱动的森林砍伐、森林退化和恢复工作的全球监测&#xff0c;加强合作与应用。 世界各国政府和公司都承诺帮助制止砍伐森林和加快恢复&#xff0c;以避免气候变化带来的最坏影响&#xff0c;防止生物多样性丧失&#xff0c;保护森林对人类和自然…

TriCore:Interrupt 2

今天继续来看看 IR 模块。 名词缩写 缩写全称说明IRInterrupt Router SRService Request 包括&#xff1a; 1. External Resource 2. Internal Resource 3.SW&#xff08;Software&#xff09; SPService Privoder 包括&#xff1a; 1. CPU 2. DMA SRNService Request NodeS…