电梯调度程序3

MMP垃圾作业

[GitHub](https://github.com/RTXUX/Elevator-scheduling.git) # 电梯调度程序 ## C++实现过程 这次作业我是在寒假作业的基础上改的~~(因为我第一次作业劣化了架构)~~,为```Elevator```类添加了一个虚函数```isPassengerCompatible()```,然后创建了```ElevatorOnlyOdd```和```ElevatorOnlyEvenAndOne```继承自```Elevator```并实现了各自的```isPassengerCompatible()```来确定一名乘客是否能搭乘这台电梯,并将```vector triggeredPassenger```移到了```Elevator```,然后添加了一个```Dispatcher```类,~~为了简单~~我在请求触发时刻就将乘客随机绑定到一台兼容的电梯上,然后改变了我为Stolf大佬的调度算法写的输入适配桥,以适配当前的数据结构,各台电梯独立运作。 ## C实现思路 我大概会像COM C Interop那样模拟面向对象吧,具体可以参见[这里](https://www.codeproject.com/Articles/13601/COM-in-plain-C)

遇到的困难

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.

posted @ 2018-05-10 20:30  rtxux  阅读(247)  评论(1编辑  收藏  举报