Aquí hay otra respuesta que nadie parece haber llegado todavía. forLos bucles deben usarse cuando necesita iterar sobre una secuencia . El uso !=es el método más conciso para establecer la condición de terminación del bucle. Sin embargo, el uso de un operador menos restrictivo es un lenguaje de programación defensiva muy común. Para los enteros no importa: es solo una elección personal sin un ejemplo más específico. Recorrer colecciones con iteradores que desea usar !=por las razones que otros han declarado. Si considera secuencias de floato double, entonces desea evitar !=a toda costa.
Lo que quería señalar es que forse usa cuando necesita iterar sobre una secuencia. La secuencia generada tiene un punto de inicio, un intervalo y una condición de finalización. Estos se especifican de manera concisa dentro de la fordeclaración. Si se encuentra (1) sin incluir la parte del paso delfor (2) especificando algo truecomo la condición de protección, entonces no debería estar usando un forbucle.
El whilebucle se utiliza para continuar procesando mientras se cumple una condición específica. Si no está procesando una secuencia, entonces probablemente desee un whilebucle. Los argumentos de la condición de guardia son similares aquí, pero la decisión entre a whiley un forbucle debe ser muy consciente. El whilebucle se subestima en los círculos de C ++ IMO.
Si está procesando una colección de elementos (un foruso de bucle muy común ), entonces realmente debería usar un método más especializado. Desafortunadamente, std::for_eaches bastante doloroso en C ++ por varias razones. En muchos casos, la separación del cuerpo de un forbucle en una función independiente (aunque algo dolorosa) da como resultado una solución mucho más limpia. Cuando trabaje con colecciones, considere std::for_each,std::transform o std::accumulate. La implementación de muchos algoritmos se vuelve concisa y clara como el cristal cuando se expresa de esta manera. Sin mencionar que aislar el cuerpo del bucle en una función / método separado lo obliga a concentrarse en el algoritmo, sus requisitos de entrada y resultados.
Si está utilizando Java, Python, Ruby o incluso C ++ 0x , entonces debería estar utilizando una colección foreach loop adecuada . A medida que los compiladores de C ++ implementen esta característica, fordesaparecerán varios bucles y este tipo de discusiones.
int i = 10; while(i --> 0) { /* stuff */ }