繁体   English   中英

间隔分支

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM