我有一个while循环,看起来像这样:
int index = 0;
Foo foo = getFooAtIndex(index);
while(foo != NULL_FOO_VALUE) {
// do stuff with foo
index++;
foo = getFooAtIndex(index);
}
有没有什么方法可以把它重写成一个更紧凑的for循环?
C++的答案是赞赏,但我最喜欢的东西,将在C工作。所以这就排除了编写一个函数,使用这个模式来构造并返回类似Foo
s的向量,然后在其上迭代。
edit:更多信息:
假设getFooAtIndex()
是别人的API,我被卡住了。这是我得到Foo
的唯一方法,而且必须是通过索引。我不知道我会得到多少个Foo
。
我所追求的那种for
循环将允许我从循环中的任何地方调用continue
,并且仍然使其正确工作,最终迭代每个Foo
,直到getFooAtIndex()
返回空值。
2条答案
按热度按时间toiithl61#
我通常会看到:
但是
getFooAtIndex
是一个糟糕的API,它通常必须遍历整个集合。最好使用和实现fooIterator
或类似的接口。x3naxklr2#
以下是我发现的最简洁的方法:
这样做的一个优点是在for循环的条件中没有副作用;迭代在迭代表达式中适当地发生。
如果
Foo
是一个整数类型,并且它保证能够表示我们可能传递给getFooAtIndex
的任何可能的索引,那么它可以在一行中完成: