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对象的缓冲区,直接移入另一个对象,从而避免不必要的对象复制行为,进而提高程序运行的效率。

  C语言里的结构是一种复合数据类型,如下述代码中的Employee类型。在该类型的单一对象里,同时存储了员工姓名、是否已退休、月薪、性别等信息。

1
2
3
4
5
6
struct Employee {
char sName[10]; //姓名
bool bRetired; //是否已退休
int iSalary; //月薪
GenderType gender; //性别
}; //注意末尾分号不能少

  在使用C++进行程序设计时,我们通常使用第13章中讨论的类(class)▲来达到类似目的,结构体并非必须,故本章以在线方式提供。

  “李杜文章在,光焰万丈长”,唐诗无疑是中国古代文学最灿烂的篇章之一。现代人发表论文,会互相引用,喝酒吃饭,也经常会谈及谁谁谁是我哥们。作为当时最重要的文学形式,唐代的诗人也经常会在诗文中提及自己的好朋友。杜甫比李白小十一岁,二者相识于杜甫父亲杜闲家中,彼时正是李白因触怒权贵放归山林之时。两人一见,杜秒变小迷弟。杜在《与李十二白同寻范十隐居》中描绘了两人的亲密关系:”余亦东蒙客,怜君如兄弟。醉眠秋共被,携手日同行”。不仅如此,在两人各奔东西后,杜甫压抑不住对李白的思念,写了多首提及李白的诗。例如《梦李白》中云:”三夜频梦君,情亲见君意”。能连续三个晚上做梦都梦到李白,可见交情不浅。

  通过分析全唐诗中各位诗人之间的“引用”关系,可以描绘出当时诗坛的大致朋友圈图景:谁跟谁熟? 谁是圈子里的带头大哥? 全唐诗有4万多首,人工一首一首地筛查费时费力,这种重复的统计性质的工作正是计算机最擅长的。