Arc*_*rus 53 c++ loops for-loop conditional-statements
我已经看到这两个声明:
for(i=0;i<10;i++)
for(i=0;i!=10;i++)
Run Code Online (Sandbox Code Playgroud)
我知道当我到达时它们都会停止10,但使用第二个(我听说)似乎更好.有什么不同?我也想知道何时使用迭代器来访问向量的成员,迭代器条件< vec.end()和之间的区别是什么!= vec.end()
Rei*_*ica 74
for(i = start; i != end; ++i)
Run Code Online (Sandbox Code Playgroud)
这是"标准"迭代器循环.它的优点是它适用于指针和标准库迭代器(您不能依赖已operator<定义的迭代器).
for(i = start; i < end; ++i)
Run Code Online (Sandbox Code Playgroud)
这不适用于标准库迭代器(除非它们已operator<定义),但它确实具有以下优点:如果end由于某种原因而过去,它仍然会停止,因此它会稍微安全一些.我在迭代整数时被教导使用它,但我不知道它是否真的被认为是"最佳实践".
我通常写这些的方式是喜欢<.
for ( initialization ; termination condition ; iteration )
对于每一个这种的,选择youself最好的一个,以满足您的要求,termination condition您可以使用任何二进制条件运算符如>,<,>=,<=,!=
对于您提出的问题,请考虑一个随机案例,其中,
for(i=0;i!=10;i++)
{
.
.
i=11; //somewhere if the loop variable is changed to a value greater than 10 (this assumption is solely for demo)
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,循环结果是无限的.相反,如果你使用一个条件i<10,这就像往常一样.所以我的观点是,第一种方法是严格设置条件更安全一些.
最佳实践是使用!=仅使用迭代器(C++)和<否则.永远不要使用==或!=浮点数/双打.以下循环是无限循环:
for (double i = 0.0; i != 1.0; i += 0.1)
printf("yes, I'm an infinite loop ;)");
Run Code Online (Sandbox Code Playgroud)
!=如果i的值超过10,则允许测试评估为真,而如果i超过10或仅仅等于它,则<将导致它评估为假.
如果i的值可能在循环体内发生变化,那么这可能是一个考虑因素.
但是,如果您只是想要做一些事情,<更具描述性,但要么就足够了.!=对于简单的逐步通过10项和咕噜咕噜的工作类型的循环,在明确你的意图方面被认为是次优的.