我有一个如下的代码块,其中内部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的建议预先计算循环条件
请注意,如果您有一个性能关键型循环,其中一些方法可能会影响性能。如果有疑问,请检查编译器的操作并测量经过的时间。