我想检查从CONST到X的列表中的元素,其中CONST可以被视为中点,而X可以是从0到列表长度的任何数字。
我首先想到的是:
if(x>CONST) {
for(int i=CONST; i<=x; i++){
// Code here.
}
} else {
for(int i=CONST; i>=x; i--){
// Code here.
}
}
但我发现这有点难看。
有没有一种好方法可以在不使用if语句检查X是否大于/小于CONST的情况下执行此操作?
答案 0 :(得分:1)
您可以将迭代分解为静态函数。虽然不如i ++或i那么高效。
static int it(int i, int CONST, int X) { return X-CONST >= 0 ? i+1 : i-1; }
for(int i = CONST; i != X; i = it(i,CONST,X) ) { ... }
答案 1 :(得分:0)
您可以使用三元运算符在for循环中创建if语句,但这可能更难以理解。
for(int i=CONST; x>CONST ? i<=x : i>=x; i += x>CONST ? 1 : -1) {
}
答案 2 :(得分:0)
您可以尝试以下
int high = x>CONST?x:CONST; //sets the upper bound
int low = x<CONST?x:CONST; //sets the lower bound
for(int i=low; i<=high; i++){
...
}
这取决于您是否关心迭代列表的顺序。
这是一个不同的版本,从const开始并转到x。
int inc = x<CONST?-1:1;
for(int i=CONST; i!=x + inc; i+=inc){
...
}