Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

10.11.1 在内存中的表示

应该如何在内存中表示读数呢?一个很直接的做法是定义三个类Year、Month和Reading,与输入准确匹配。显然,Year和Month在处理数据过程中很有用:我们希望比较不同年份的温度,计算每月的平均温度值,比较一年中不同月份的温度,比较不同年份相同月份的温度,将温度读数与日照记录和湿度读数进行匹配,等等。本质上说,Year和Month与我们思考温度和天气的一般方式是吻合的:Month包含了一个月的信息,而Year包含了一年的信息。但是Reading呢?它与硬件(如传感器)的底层表示形式吻合。一个Reading对象的数据“(日期,小时,温度)”显得很奇怪,而且只在Month对象内才有意义。它还是非结构化的:读数不保证按日期或小时顺序给出。基本上,无论何时我们想对读数进行感兴趣的操作时,都要进行排序。

对于温度数据的内存表示,可以作如下假定:

·如果我们获得了某月的任何一个读数,就很可能会读取该月的其他更多读数。

·如果我们获得了某日的一个读数,就很可能会读取该日的其他更多读数。

如果情况确实如此,那么就有必要将Year表示为12个Month的vector,Month是包含30个Day的一个向量,而Day包含24个温度值(每小时一个)。对于很多应用来说,这种方式简单、易于处理。因此,Day、Month和Year都是简单数据结构,只是带有构造函数。既然我们计划在获取温度读数之前就创建Month和Day来作为Year的一部分,那么还需要使用一个“非读数”的概念,来表示某个小时数据还未读入。

类似地,我们引入“非月份”的概念来直接表示未读入数据的月份,以免不得不搜索该月所有日期来确定不包含数据:

于是三个关键的类可以定义如下:

也就是说,Day包括24个小时的读数,每个都被初始化为not_a_reading。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252