针对外部标志(cpp)的循环条件的更改



我有一个如下的代码块,其中内部for循环代码保持不变,但只有循环条件根据reverseFlag而改变。有没有更好的方法可以在不必复制粘贴for循环的内容两次的情况下对此进行编码?

bool reverseFlag=false;
if (reverseFlag)
{
    for(int i = 1; i < TotalFrames; i++)
    {...}
}
else
{
    for(int i = TotalFrames-1; i >0; i--)
    {...}
}

是的,您可以在单个for循环中完成,如下所示:

int from, to, step;
if (reverseFlag) {
    from = TotalFrames-1;
    to = -1;
    step = -1;
} else {
    from = 0;
    to = TotalFrames;
    step = 1;
}
for (int i = from ; i != to ; i+= step) {
    ...
}

循环前面的一个条件准备循环的参数,即开始值和结束值以及步长,然后循环使用这三个值在所需的方向上迭代。

有几个选项。您可以:

  • 使用两个循环,但将循环体放在一个单独的函数/object/lambda中。。以避免重复
  • 使用递增循环并计算循环中的实际指数:

    j = reverseFlag ? TotalFrames - i : i; 
    
  • 按照@dasblinkenlight的建议预先计算循环条件

请注意,如果您有一个性能关键型循环,其中一些方法可能会影响性能。如果有疑问,请检查编译器的操作并测量经过的时间。

最新更新