首页
登录 | 注册

电梯调度程序3

MMP垃圾作业

GitHub

电梯调度程序

C++实现过程

这次作业我是在寒假作业的基础上改的(因为我第一次作业劣化了架构),为Elevator类添加了一个虚函数isPassengerCompatible(),然后创建了ElevatorOnlyOddElevatorOnlyEvenAndOne继承自Elevator并实现了各自的isPassengerCompatible()来确定一名乘客是否能搭乘这台电梯,并将vector<Passenger> triggeredPassenger移到了Elevator,然后添加了一个Dispatcher类,为了简单我在请求触发时刻就将乘客随机绑定到一台兼容的电梯上,然后改变了我为Stolf大佬的调度算法写的输入适配桥,以适配当前的数据结构,各台电梯独立运作。

C实现思路

我大概会像COM C Interop那样模拟面向对象吧,具体可以参见这里

遇到的困难

1. std::remove_if()的问题

这简直是我遇到的第二具有迷惑性名称了(第一是std::remove_copy_if()),我居然天真地以为std::remove_if()自己会把元素从容器移除,就没有写erase(),结果导致了一大堆异常行为,单步过去才发现容器中的元素并没有被移除,后来查阅资料才发现std::remove_if()只是"prepare for erasing",还是要自己erase一下的
解决方案:加上erase()解决
PS: std::xxx_if()系列函数目前的实现版本对每个元素只调用一次pred,但这不是保证的行为,因此若pred函数不是幂等的,如存在副作用,可能导致未定义行为

2. MSVC兼容性问题

跨平台老话题了,我在Windows Subsystem for Linux(以下简称"WSL")下开发的程序,头文件内容有所不同,如min()和max()在MSVC工具链下存在于algorithm,在Linux下存在于cstdlib等问题,以及GCC会自动包含一些头文件而MSVC不会
解决方案:按报错一项一项解决

类图

To be done.



2019 cecdns.com webmaster#cecdns.com
11 q. 0.081 s.
京ICP备10005923号