Aqui está outra resposta que ninguém parece ter encontrado ainda. forloops devem ser usados quando você precisar iterar sobre uma sequência . Usar !=é o método mais conciso de indicar a condição de término do loop. No entanto, o uso de um operador menos restritivo é um idioma de programação defensiva muito comum. Para números inteiros, isso não importa - é apenas uma escolha pessoal sem um exemplo mais específico. Fazendo loop nas coleções com iteradores que você deseja usar !=pelos motivos que outras pessoas declararam. Se você considera sequências de floatou double, então deseja evitar !=a todo custo.
O que eu queria ressaltar é que foré usado quando você precisa iterar em uma sequência. A sequência gerada possui um ponto inicial, um intervalo e uma condição final. Eles são especificados de maneira concisa na fordeclaração. Se você (1) não incluir a parte da etapa forou (2) especificar algo como truea condição de guarda, não deverá usar um forloop!
O whileloop é usado para continuar o processamento enquanto uma condição específica é atendida. Se você não está processando uma sequência, provavelmente deseja um whileloop. Os argumentos da condição de guarda são semelhantes aqui, mas a decisão entre a whilee um forloop deve ser muito consciente. O whileloop é subestimado nos círculos C ++ IMO.
Se você estiver processando uma coleção de itens (um foruso muito comum de loops), deverá realmente usar um método mais especializado. Infelizmente, std::for_eaché bastante doloroso em C ++ por vários motivos. Em muitos casos, separar o corpo de um forloop em uma função independente (embora um pouco dolorosa) resulta em uma solução muito mais limpa. Ao trabalhar com coleções, considere std::for_each, std::transformou std::accumulate. A implementação de muitos algoritmos se torna concisa e clara quando expressa dessa maneira. Sem mencionar que o isolamento do corpo do loop em uma função / método separado força você a se concentrar no algoritmo, em seus requisitos de entrada e em resultados.
Se você estiver usando Java, Python, Ruby, ou mesmo C ++ 0x , então você deve estar usando uma coleta adequada foreach loop. À medida que os compiladores C ++ implementam esse recurso, vários forloops desaparecem, assim como esses tipos de discussões.
int i = 10; while(i --> 0) { /* stuff */ }