Oto kolejna odpowiedź, której nikt jeszcze nie wymyślił. forpę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 floatlub double, to chcesz uniknąć !=za wszelką cenę.
Chciałem zwrócić uwagę, że forjest 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 forinstrukcji. Jeśli okaże się, że (1) nie obejmuje części krokowej forlub (2) określając coś w rodzaju truewarunku ochronnego, nie powinieneś używać forpętli!
whilePętla służy do kontynuowania pracy, gdy warunek jest spełniony specyficzny. Jeśli nie przetwarzasz sekwencji, prawdopodobnie whilezamiast tego potrzebujesz pętli. Argumenty warunku ochronnego są tutaj podobne, ale decyzja między pętlą whilea forpętlą powinna być bardzo świadoma. whilePętli pod cenione w środowisku C ++ MOM.
Jeśli przetwarzasz kolekcję przedmiotów (bardzo częste forużycie pętli), naprawdę powinieneś użyć bardziej specjalistycznej metody. Niestety std::for_eachjest dość bolesny w C ++ z wielu powodów. W wielu przypadkach oddzielenie korpusu forpę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::transformczy 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 forpętli zniknie, podobnie jak tego rodzaju dyskusje.
int i = 10; while(i --> 0) { /* stuff */ }