什么循环用于可能在结束前中断的迭代?

Bjö*_*lex 0 c++ iteration loops

我有一系列内存要解析.如果我在结束前找到某个字节序列,我会中断迭代.我想知道我应该选择哪个循环:

while(i < end && !sequenceFound ) {
    // parse
    i++;
}
Run Code Online (Sandbox Code Playgroud)

要么

for( i; i < end && !sequenceFound; i++ ) {
    // parse
}
Run Code Online (Sandbox Code Playgroud)

这用于从实现环形缓冲区的类派生的类的方法中.超类提供iend.我的问题是,对于不熟悉代码的人,您认为哪一个更易于理解(表达意图更好)?

编辑我发现序列是进一步解析流所需的事实.我可以使用break和设置sequenceFound = true,但那将是多余的,或者我在这里严格要求?

CB *_*ley 6

为什么不在break;需要"中断"循环的时候使用它.这似乎是大多数惯用语言表达您的意图的语言功能.它通常意味着您可以不使用额外的布尔状态跟踪变量.

如果您需要知道迭代是否提前终止,您可以使用condidition i != end.无论哪种方式,使用最清晰的控制方法似乎最好,并且break;在您想要破解的点对我来说似乎最清楚,无论您是否保持"提前退出"变量.进行循环并测试一个你刚刚保证会失败的条件似乎是多余的.