Codelearn

分享Python,C/C++相关的技术文章, 海洋饼干叔叔@重庆大学

  将两个有序的子数组合并为一个整体有序的数组跟幼稚园里小朋友排队的道理差不多。假设小一班和小二班的小朋友已经按照身高由低到高排好队了,你是幼儿园老师,需要将小一班和小二班的队列合并为按身高由低到高的单一队列,那么,你很容易得到下述算法:比较排头位的两位小朋友的身高,将其中较矮的小朋友“拉”到新的队列中去;重复上述过程直至两个队列的小朋友都被拉完为止。如果其中一个队列的小朋友提前被拉完,那么另一个队列的剩余小朋友依次拉入新队列即可。

  包含如下内容的文件dora.ini存储了学号为20210426的某同学的姓名、年龄、以及已修三门课程的名称和分数。这种名为ini的文件格式可以很方便地存储结构化的对象信息。相较于自行设计文本文件的内容结构,直接使用ini格式既方便,扩展性又好。本实践中,我们借助于大名鼎鼎的boost库来解析ini文件。

1
2
3
4
5
6
7
8
9
10
11
12
[basic]
sNo=20210426
sName=Dora Chen
iAge=17
[scores]
size=3
sName_0=C++
iScore_0=97
sName_1=Calculus
iScore_1=70
sName_2=Economics
iScore_2=65

  设计模式(design patterns)是软件体系结构中一个比较深入的话题。其中,单件(singleton)模式是其中最简单的一种,它描述了下述应用场景其及解决方案:在程序中,有些类型我们最多只需要一个对象,比如数据库连接、错误日志记录器等等。单件模式试图通过特殊的类设计确保该类型最多只能被实例化一次。

  朵拉大学毕业,因学业优秀,得以进入华为公司工作。显然,这意味着朵拉离开原大学,成为华为公司的一员。如果把朵拉(dora)视为一个对象,同时把华为(huawei)视为一个容器,下述代码表征了dora对象加入huawei容器的行为:

1
huawei.push_back(dora);

  遗憾的是,上述代码的实际执行结果并不符合预期。按照本书19.2节的讨论,容器通过拷贝复制行为制造了一个dora的复制品,真正加入华为的是dora的复制品,而不是本尊。原有对象dora依然存在于内存中。

  C++提供了移动拷贝构造函数以及移动赋值函数,它们可以把一个预期不再被需要的对象的资源,如string对象的缓冲区,直接移入另一个对象,从而避免不必要的对象复制行为,进而提高程序运行的效率。