电梯调度程序3
Posted rtxux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电梯调度程序3相关的知识,希望对你有一定的参考价值。
MMP垃圾作业
电梯调度程序
C++实现过程
这次作业我是在寒假作业的基础上改的(因为我第一次作业劣化了架构),为Elevator
类添加了一个虚函数isPassengerCompatible()
,然后创建了ElevatorOnlyOdd
和ElevatorOnlyEvenAndOne
继承自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.
以上是关于电梯调度程序3的主要内容,如果未能解决你的问题,请参考以下文章