我正在处理的一个项目 (C++11) 涉及一段代码,该代码块将在某处运行数万亿次。我在 [1,N] 中有一个整数参数 B 和点 1 = b1 < b2 < ... < bk = N 代码根据哪个区间 [bi, b(i+1) 执行不同的小代码块) B 在于。在整个执行过程中唯一变化的值是 B。但是,虽然 bi 的值是固定的,但它们仅在运行时确定。
天真的事情是写一堆 if 和 else if 语句,在最坏的情况下涉及 k 次比较。然而,可以在恒定时间内做到这一点:构造一个大小为 N 的向量 myGotos,并在每个区间 [bi, b(i+1)) 上存储相应代码块的位置。然后你只需执行 goto myGotos[B]。
在我看来,上面的解决方案平均起来会更快,但代码会非常难看。我想知道是否有更好的方法来做到这一点。