Aqui está outra resposta que ninguém parece ter encontrado ainda. for
loops 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 float
ou 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 for
declaração. Se você (1) não incluir a parte da etapa for
ou (2) especificar algo como true
a condição de guarda, não deverá usar um for
loop!
O while
loop é usado para continuar o processamento enquanto uma condição específica é atendida. Se você não está processando uma sequência, provavelmente deseja um while
loop. Os argumentos da condição de guarda são semelhantes aqui, mas a decisão entre a while
e um for
loop deve ser muito consciente. O while
loop é subestimado nos círculos C ++ IMO.
Se você estiver processando uma coleção de itens (um for
uso 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 for
loop 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::transform
ou 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 for
loops desaparecem, assim como esses tipos de discussões.
int i = 10; while(i --> 0) { /* stuff */ }