电梯调度程序3
MMP垃圾作业
[GitHub](https://github.com/RTXUX/Elevator-scheduling.git) # 电梯调度程序 ## C++实现过程 这次作业我是在寒假作业的基础上改的~~(因为我第一次作业劣化了架构)~~,为```Elevator```类添加了一个虚函数```isPassengerCompatible()```,然后创建了```ElevatorOnlyOdd```和```ElevatorOnlyEvenAndOne```继承自```Elevator```并实现了各自的```isPassengerCompatible()```来确定一名乘客是否能搭乘这台电梯,并将```vector遇到的困难
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.