Oto kolejna odpowiedź, której nikt jeszcze nie wymyślił. for
pętle powinny być używane, gdy trzeba iterować po sekwencji . Użycie !=
jest najbardziej zwięzłą metodą określenia warunku zakończenia pętli. Jednak stosowanie mniej restrykcyjnego operatora jest bardzo powszechnym idiomem programowania obronnego. Dla liczb całkowitych nie ma to znaczenia - jest to tylko osobisty wybór bez bardziej szczegółowego przykładu. Pętle nad kolekcjami z iteratorami, których chcesz używać !=
z powodów, które podali inni. Jeśli weźmiesz pod uwagę sekwencje float
lub double
, to chcesz uniknąć !=
za wszelką cenę.
Chciałem zwrócić uwagę, że for
jest używany, gdy trzeba iterować sekwencję. Wygenerowana sekwencja ma punkt początkowy, odstęp i warunek zakończenia. Są one zwięźle określone w for
instrukcji. Jeśli okaże się, że (1) nie obejmuje części krokowej for
lub (2) określając coś w rodzaju true
warunku ochronnego, nie powinieneś używać for
pętli!
while
Pętla służy do kontynuowania pracy, gdy warunek jest spełniony specyficzny. Jeśli nie przetwarzasz sekwencji, prawdopodobnie while
zamiast tego potrzebujesz pętli. Argumenty warunku ochronnego są tutaj podobne, ale decyzja między pętlą while
a for
pętlą powinna być bardzo świadoma. while
Pętli pod cenione w środowisku C ++ MOM.
Jeśli przetwarzasz kolekcję przedmiotów (bardzo częste for
użycie pętli), naprawdę powinieneś użyć bardziej specjalistycznej metody. Niestety std::for_each
jest dość bolesny w C ++ z wielu powodów. W wielu przypadkach oddzielenie korpusu for
pętli w funkcji wolnostojącej (choć nieco bolesne) skutkuje znacznie czystszym rozwiązaniem. Podczas pracy ze zbiorami, należy rozważyć std::for_each
, std::transform
czy std::accumulate
. Implementacja wielu algorytmów staje się zwięzła i krystalicznie czysta, gdy jest wyrażana w ten sposób. Nie wspominając już o tym, że izolowanie ciała pętli w oddzielną funkcję / metodę zmusza cię do skoncentrowania się na algorytmie, jego wymaganiach wejściowych i wynikach.
Jeśli używasz Java, Python, Ruby, a nawet C ++ 0x , powinieneś używać odpowiedniej pętli foreach kolekcji . Gdy kompilatory C ++ implementują tę funkcję, wiele for
pętli zniknie, podobnie jak tego rodzaju dyskusje.
int i = 10; while(i --> 0) { /* stuff */ }