基于变量的for循环方向

时间:2013-05-02 11:28:21

标签: c++

我有几个很大的for循环,我想分成函数来减少代码重复。

它们之间的唯一区别是循环的第一行。

一个是:

for (int j = 50; j < average_diff; j++) {

另一个是:

for (int j = upper_limit; j > lower_limit; j--) {

我有一个整数,tb表示我想使用哪一个(它的值分别为1或2)。

我想知道如何才能做到最好。这是宏的一个很好的用例吗?

3 个答案:

答案 0 :(得分:6)

不,对于宏来说听起来不是一个好例子。

最好的(大多数C ++ - ish)事情可能是使用range,并将其传递给函数。

答案 1 :(得分:6)

不要包装for,只需将内容包装在函数中:

for (int j = 50; j < average_diff; j++) {
   process(j);
}

for (int j = upper_limit; j > lower_limit; j--) {
   process(j);
}

答案 2 :(得分:1)

如果您的变量与某个方向相同,1,另一个方向2,则可以使用ternary operator ?:

for (int i = (dir == 1 ? 0 : 20);
     dir == 1 ? i < upper_limit :
                i > lower_limit;
     i += (dir == 1 ? 1 : -1))
{
    ...
}

但是,如果您只使用简单的if语句,它可能更具可读性:

if (dir == 1)
{
    for (int i = 0; i < upper_limit; i++)
    {
    }
}
else
{
    for (int i = 20; i > lower_limit; i--)
    {
    }
}

如果你选择最后一个,那么我建议你把代码放在循环中,放在你调用的单独函数中,这样你就没有任何重复的代码了。