我的问题是如何最好地处理可以接受参数的长重循环。考虑以下方法:
void HeavyLoop(byte* startingAddress, bool secondaryModification)
{
for (int i = 0; i < 10000000; i++)
{
byte* b = startingAddress + i;
*b+= 1;
if (secondaryModification) *b+= 2;
}
}
这种方法可以实现我想要的功能,但是在循环中使用了10000000个不必要的if
语句。
如果我像这样编写相同的方法:
void HeavyLoop(byte* startingAddress, bool secondaryModification)
{
if (secondaryModification)
{
for (int i = 0; i < 10000000; i++)
{
byte* b = startingAddress + i;
*b+= 1;
*b+= 2;
}
}
else
{
for (int i = 0; i < 10000000; i++)
{
byte* b = startingAddress + i;
*b+= 1;
}
}
}
我将得到相同的结果,但我的整个循环代码必须被复制。如果我们只讨论一个参数,这并不是什么大问题,但当你有4个独立的参数时,我必须编写16个不同版本的循环。
在这种情况下,“正确”的解决方案是什么?如果这是像Python这样的语言,我可以动态构建一个函数来处理循环。C++中是否有类似的东西?
不用说,代码只是一个例子,而不是实际情况。请不要给出与 *b+=1 有关的解决方案。如果有语法错误,请原谅我,因为我现在没有编译器。
编辑:问题是处理不能在循环外预先计算的语句。
if
检查,我认为这个问题并不严重依赖于实际语句,对吗? - Rotem