CS225 CA1 知识库
1, Intro
本次大作业内容极其宽泛,要求我们设计一个基于C++的医院疫苗登记信息管理系统。涉及到:
- C++ style 的文件读写
- 生成csv的Python程序 or 在线网站,用于构造测试样例
- Linked List 形式的 病人信息记录模块,包含有ID, 姓名,RISK, 职业,年龄等要素
- 斐波那契堆,优先队列用来排序,登记,储存病人信息
- 根据RISK, 职业,年龄等要素排序的功能
- WITHDRAW 系统
- 生成周报,月报的能力
2,相关的资源:
2.1 文件读写:
我们选择使用以下三个库进行文件的读写功能
#include <fstream>
#include <string>
#include <sstream>
主要参考了以下文章:
C++文件读写操作(三)如何统计文本的行数及如何读取文件某一行内容
C++如何逐块读取CSV
推荐下面这个视频,可以开始时看
B站视频:chapt9-2-文本文件读写
fstream库用法详解
2.2 生成report
这就涉及到输出流的操作
其实还是fstream库,不过核心在于如何高效简单的拆分函数块输出文件
管理子函数很麻烦
2.3 稀奇古怪的debug时间
那些写#include "xxx.cpp"的牲口,应该祭天~
—知乎文章:https://zhuanlan.zhihu.com/p/81681440
2.3.1 一大票 undefined 问题
我愿称之为地狱绘卷。
似乎我们遇到了两个问题:
1、 某处函数接口定义不同,重载的内存地址定向出错
2、错误的include
cytin 重写了整个函数,试图让他能跑起来,在visual studio 里成功了,但还是不能在vs code 和 mac Clion 里跑
2.3.2 发现了一个叫.hpp的文件格式
.hpp文件的作用以及与传统.h文件的区别
1、hpp,其实质是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减project中的cpp文件数与编译次数,也不再发布烦人的lib与dll,因此非常适合用来编写公用的开源库。是Header
plus plus得缩写2、与*.h类似,hpp是C++程序的头文件,是VCL专用的头文件,已预编译,是一般模板类的头文件,一般来说,.h里面只有声明,没有实现,而.hpp里面声明实现都有,后者可以减小cpp的数量。
3、注意hpp文件不可包含全局对象和全局函数由于hpp本质上是作为.h被调用者include,所以当hpp文件中存在全局对象或者全局函数,而该hpp被多个调用者include时,将在链接时导致符号重定义错误。