在“for”语句中,我应该使用`!=`还是`<`?
我已经看到这两个两个语句:
for(i=0;i<10;i++) for(i=0;i!=10;i++) 
 我知道他们都停止了,当我达到10 ,但它似乎更好地使用第二个(我听到)。 什么是不同的?我也想知道什么时候使用迭代器访问一个向量的成员,迭代器条件< vec.end()和!= vec.end()之间有什么区别!= vec.end() 
 for(i = start; i != end; ++i) 
 这是“标准”迭代器循环。 它的优点是可以同时使用指针和标准库迭代器(不能依赖具有operator<定义的)迭代器。 
 for(i = start; i < end; ++i) 
 这对标准库迭代器不起作用(除非它们具有operator< defined),但是它的优点是,如果由于某种原因而end ,它将会停止,所以它稍微安全一些。 我被教导使用这个迭代整数,但我不知道它是否被认为是“最佳实践”。 
 我通常写这些的方式是喜欢< 。 
两者都将在大多数情况下工作。
 如果由于某种原因,在循环中执行的代码主体将i更改为大于10东西,第一个版本将停止循环,但第二个将永远执行。 
 我每天的做法是使用<当我循环与简单的types,如整数,并使用!=当我使用stl类迭代器 
 for ( initialization ; termination condition ; iteration ) 
 对于其中的每一个,select自己最适合您的要求, 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) . . . } 
 在这种情况下,循环变成无限的。 相反,如果你使用的条件i<10 ,这一切照常工作。 所以我的观点是,第一种方法是严格设置条件更安全。 
最好的做法是使用!=仅用于迭代器(C ++)和<否则。 永远不要使用==或!=与浮动/双打。 以下循环是一个无限循环:
 for (double i = 0.0; i != 1.0; i += 0.1) printf("yes, I'm an infinite loop ;)"); 
如果我的值超过10,则允许testing评估为true;而如果我超过10或者仅仅等于10,则会导致评估错误。
如果我的价值可能会在循环体内发生变化,这可能是一个考虑因素。
但是,如果你只是想要做某些事情,那么<更具描述性,但是也可以。 对于简单的一步一步的工作types的循环,在明确你的意图方面被认为是不理想的。
我知道他们都停止了,当我达到10,但它似乎更好地使用第二个(我听到)。
 这是一个微观优化。 使用更有意义的东西(上面的<更有意义)。 
有什么不同?
 第一个版本使用不等式运算符!= ,第二个使用较less的运算符< 。 
 由于其他人陈述的原因,我通常在for循环中使用< 。 在while循环和更高级的for循环中, !=使我更容易理解我的程序的function。 
 假设我想在[5,5,5,3,5,2,3,2,0]这样的数组中第一次运行'5'之后find位置。 那就是我们要k使得0 <= i < k => a[i] = 5 : 
 int pos = 0; // Inv: a[0..pos) = 5 while (pos != N && a[pos] == 5) pos = pos+1; 
 一旦循环已经执行,我们知道环路保护的反向是正确的: pos == N || a[pos] != 5  pos == N || a[pos] != 5 。 无论哪种情况,我们都有我们想要的位置。 
 现在说我们已经在循环守卫中使用了< ,然后所有我们后来知道的是pos >= N || a[pos] != 5  pos >= N || a[pos] != 5 ,但这不是我们想要的情况。做更多的工作,我们可以certificate我们不可能在pos > N ,但是这个接缝像浪费时间只是在环卫中使用!= 。