[英]Interval branching
我正在从事的一个项目(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))上存储相应代码块的位置。 然后,您只需转到myGotos [B]。
在我看来,以上解决方案似乎平均起来会更快,但是代码却很难看。 我想知道是否有更好的方法可以做到这一点。
常用的方法是使用switch语句
switch(B){
case b1:..//
break;
}
如果您可以将这些代码段声明为lambdas或std :: function,只要它们具有相同的参数。即使使用模板化函数也可以。 在不知道运行这些功能实际需要什么的情况下很难回答。
map<int,decltype(yourLambda)>
似乎也可以正常工作。
初始化N
个插槽的数组,让K
,其中每个插槽包含包含间隔的索引。
然后
switch (K[B])
{
case 1: // [B1,B2)
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.