do while vs while vs for

0

Cześć, czy pętla do while może z jakiś względów być mniej wydajna od while lub for zakładając, że ma się wykonać taką samą ilość razy?

3

No jasne, pod warunkiem, że w do-while będziesz miał dłużej wykonujący się kod ;]

Serio, nie znalazłeś sobie lepszego miejsca na ultra-mikro optymalizacje?

3

Sprwadźmy: https://godbolt.org/g/1fWYrc

Nie widzę nic, co mogło by wpłynąć na wydajność.

2

Całkowicie zgadzam się z @spartanPAGE, z drugiej strony jeśli nurtują Cię tego typu rzeczy, to możesz sobie to po prostu sprawdzić np. na stronie https://gcc.godbolt.org/ poprzez porównanie wynikowego kodu obu wersji implementacji.

Edit: Spóźniłam się;)

0

Generalnie te trzy pętle są trochę inne semantycznie. For i while są praktycznie równoważne (z dokładnością do zasięgu zmiennych), a do-while ma inną semantykę niż while, więc zarówno emulowanie do-while za pomocą while, jak i vice-versa nie mają sensu, bo musisz dorabiać sprawdzanie flag (lub inne obejścia) zamiast po prostu programować jak człowiek.

Przykłady podane przez @kq są w rzeczywistości różne, nie ma tam emulacji while za pomocą do-while (ani vice-versa).

1

Raczej nie ma większych różnic w ASM, ale czasami można uniknąć jednego sprawdzenia jeśli wybierzesz dobrze między "do while" i "while".
Dodatkowo możesz zawalczyć używając odpowiedniego operatora, np:

int n = 10;
while (n --> 0) {
  cout << n << "\n";
}

Stary "for" to w zasadzie bardziej strukturalny while.
Nowy "for-each" to już zupełnie co innego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1