C++ 高级特性:电梯程序、多文件编程与模板异常
1. 电梯程序规则与状态图
1.1 电梯运行规则
电梯运行遵循一系列规则,以确保高效服务乘客:
1. 若当前楼层有下行请求且电梯正在下行,则加载乘客。
2. 若电梯上下方都没有目标楼层或请求,则停止运行。
3. 若上方有目标楼层,电梯上行。
4. 若下方有目标楼层,电梯下行。
5. 若电梯停止或上行,且上方有楼层请求,同时在电梯与请求楼层之间没有其他上行电梯,或在请求楼层上方没有更接近的下行电梯,则电梯上行。
6. 若电梯停止或下行,且下方有楼层请求,同时在电梯与请求楼层之间没有其他下行电梯,或在请求楼层下方没有更接近的上行电梯,则电梯下行。
7. 若其他规则均不适用,电梯停止。
规则 5 和 6 较为复杂,旨在防止多台电梯争抢同一楼层请求,但效果并非完美。在某些情况下,电梯可能因担心其他电梯已前往响应请求而延迟响应,实际上其他电梯可能在响应不同楼层的请求。可以通过让 decide()
函数在检查当前电梯上下方是否有请求时区分上下行请求来改进策略,但这会使已经很长的 decide()
函数更加复杂。
1.2 电梯状态图
为简化分析,假设大楼内只有一人且仅使用一部电梯,此时每次只有一个楼层请求和一个乘客选择的目标楼层,电梯无需考虑其他电梯的运行情况。状态图中,“cd” 代表轿厢目标楼层(轿厢内按下的按钮,大致对应程序中目标数组的值),“fr” 代表楼层请求(轿厢外按下的按钮,对应 floor_req
变量)。电梯状态由