C++ 对于可能在结束前中断的迭代,使用哪个循环?
我有一个要解析的内存范围。如果我在结束之前找到某个字节序列,我就会中断迭代。我想知道在这里我更喜欢哪个循环:C++ 对于可能在结束前中断的迭代,使用哪个循环?,c++,loops,iteration,C++,Loops,Iteration,我有一个要解析的内存范围。如果我在结束之前找到某个字节序列,我就会中断迭代。我想知道在这里我更喜欢哪个循环: while(i < end && !sequenceFound ) { // parse i++; } while(i
while(i < end && !sequenceFound ) {
// parse
i++;
}
while(i
或
<代码>for(i;ii
和end
。我的问题是,对于不熟悉代码的人,您认为哪一个更容易理解(更好地表达意图)
编辑我发现序列的事实对于进一步解析流是必要的。我可以使用
break
并设置sequenceFound=true
,但这是多余的,还是我在这里太严格了?我喜欢,而在这里设置,因为这样读起来更好。不过这可能是个人喜好<代码>直到在某些语言中可用的
也很好。对于有明确限制的迭代,我通常使用For循环。而循环应该在迭代没有上限时使用。第二个版本更便于理解,并允许使用continue操作符。为什么不使用break代码>在遇到需要“中断”循环时。这似乎是最惯用的表达你意图的语言特征。这通常意味着您可以不使用额外的布尔状态跟踪变量
如果您需要知道迭代是否提前终止,可以使用条件i!=结束。
无论哪种方式,使用最清晰的控制方法似乎都是最好的,中断无论您是否维护了一个“提前退出”变量,代码>在您想要中断的点对我来说似乎是最清楚的。继续循环并测试一个您刚刚保证会失败的条件似乎是多余的。如果在每次迭代之前我要检查多个条件,我通常使用while循环 对于带有循环变量和结束的循环(即,对于通过检查i!=end
或i
在某个范围内运行的所有循环),我赞成For
方法,因为这或多或少是For
的规范用法
如果您可能过早离开循环,中断
:
for(; i != end; ++i) {
// parse
if (sequenceFound)
break;
}
同意Charles Bailey的观点,因为一旦在迭代中中断,就可以立即中断最直接的循环结构,而无需重新计算条件变量。另外,您不需要额外的条件变量,从而减少了代码块运行所需的内存。我更喜欢内部带有中断的for
原因是您可以避免必须检查“中断”条件的丑陋结构,例如:
for(; i != end; ++i) {
// do stuff
if (sequenceFound) break;
// you don't need an 'if(!sequenceFound)' around this block of code
// do more stuff
}
但是,无论是while版本还是for版本,都内置了条件,当然这取决于您所做的工作,您无法轻易避免这种条件。更喜欢算法而不是手写循环
#include <algorithm>
auto it = std::find(begin, end, predicate);
if (it == end)
:-(
else
:-)
#包括
auto it=std::find(开始、结束、谓词);
if(it==end)
:-(
其他的
:-)
为什么不中断代码>找到序列后?稍后需要变量,我将该信息编辑到我的问题中。如果是这种情况,我通常会在循环后检查if(I==end)
以查看我是否跳出了loop@Space_C0wb0y例如我确实说过,如果您需要知道迭代是否提前终止,可以使用条件i!=结束
。无论哪种方式,使用最清晰的控制方法似乎都很简单,break
对于我来说,无论您是否维护“提前退出”变量,在您想要中断的点上似乎最清晰。这似乎是多余的进行循环和测试的条件,你只是刚刚保证会失败。我接受了主要是因为你的评论以上。如果你得到了答案的那一部分,那就太好了。+1使用中断意味着你不需要for循环中复杂的结束条件。人们并不真正了解for循环的条件,因为它们通常是相同的。
#include <algorithm>
auto it = std::find(begin, end, predicate);
if (it == end)
:-(
else
:-)