Lembro-me dos meus dias em que fizemos a Assembléia do 8086 na faculdade, que era mais eficiente:
for (int i = 6; i > -1; i--)
pois houve uma operação JNS que significa Jump if No Sign. Usar isso significava que não havia pesquisa de memória após cada ciclo para obter o valor de comparação e também nenhuma comparação. Atualmente, a maioria dos compiladores otimiza o uso do registro para que a memória não seja mais importante, mas você ainda recebe uma comparação desnecessária.
A propósito, colocar 7 ou 6 no seu loop é introduzir um " número mágico ". Para melhor legibilidade, você deve usar uma constante com um Nome revelador de intenção. Como isso:
const int NUMBER_OF_CARS = 7;
for (int i = 0; i < NUMBER_OF_CARS; i++)
EDIT: As pessoas não estão recebendo a coisa de montagem, portanto é obviamente necessário um exemplo mais completo:
Se fizermos por (i = 0; i <= 10; i ++), você precisará fazer o seguinte:
mov esi, 0
loopStartLabel:
; Do some stuff
inc esi
; Note cmp command on next line
cmp esi, 10
jle exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
Se fizermos por (int i = 10; i> -1; i--), então você pode se safar com isso:
mov esi, 10
loopStartLabel:
; Do some stuff
dec esi
; Note no cmp command on next line
jns exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
Acabei de verificar e o compilador C ++ da Microsoft não faz essa otimização, mas o faz se você:
for (int i = 10; i >= 0; i--)
Portanto, a moral é que se você estiver usando o Microsoft C ++ †, e subir ou descer não faz diferença, para obter um loop rápido, você deve usar:
for (int i = 10; i >= 0; i--)
em vez de qualquer um destes:
for (int i = 10; i > -1; i--)
for (int i = 0; i <= 10; i++)
Mas, francamente, obter a legibilidade de "for (int i = 0; i <= 10; i ++)" é normalmente muito mais importante do que perder um comando do processador.
† Outros compiladores podem fazer coisas diferentes.