3

我有一些代码应该做一件简单的事情:

如果参数的值为-1,那么我应该更改该值。否则 - 什么都不做

我有一个包含 20 个参数的列表,但我想知道是否有任何方法可以不做检查:

如果 param1 == -1 则 ... 否则 ...

如果 param2 == -1 那么.... 否则...

有人知道我能做些什么来提高效率吗?谢谢!

4

4 回答 4

4

如果参数都是变量(不是数组什么的),你可以做一个函数并写

change_or_let_it_be( &param1, value );
change_or_let_it_be( &param2, value );
change_or_let_it_be( &param3, value );

你只有一个 if (in function) 和很多电话。最好将其存储在某个结构(数组、列表等)中,并避免调用此函数 20 次。

于 2013-06-05T08:55:08.480 回答
3

不知道我是否理解你想要的,但是这个怎么样?

void func(int params[20]) {
    for (int i = 0; i < 20; ++i) {
        if (params[i] == -1)
            params[i] = NEW_VALUE;
    }
}

使用 for 检查每个值,因此您不需要硬编码所有不同的值,然后在参数为 -1 时更改参数。另请注意,我假设“高效”是指代码编写时间效率更高!

于 2013-06-05T09:04:04.293 回答
0

老实说,一系列 if/then 语句是最有效的,如果不是最漂亮的解决方案的话!将测试嵌入循环并将参数存储为数组需要以下额外计算:

- testing that the loop counter does not exceed the maximum
- incrementing the loop counter
- using pointer arithmetic to access each parameter

当然,如果您必须多次执行这 20 次测试,这些速度因素只是一个因素。但事实上你已经尽可能高效地编写了它:)

于 2013-06-05T10:38:25.747 回答
0

另一个更清洁的解决方案:

int *p[] = {&param1, &param2, &param3, NULL};
int i = 0;
for(;p[i] != NULL; i++) {
    if(*p[i] == -1) *p[i] = SOME_VALUE;
}
于 2013-06-05T10:49:37.207 回答