2010-06-22 11 views
9

widzę gdzieś to wspomina:Iterator C++ dla pułapek pętli?

for (itr = files.begin(); itr < files.end(); ++itr) // WRONG 
for (itr = files.begin(); itr != files.end(); ++itr) // ok 

Dlaczego jest pierwszym wyrazem źle? Zawsze używałem pierwszego wyrażenia i nie miałem żadnych problemów.

Odpowiedz

21

zamawiania porównania takie jak <, >, <=, >= będą pracować dla iteratory o dostępie swobodnym, ale wiele innych iteratorów dwukierunkowych (takich jak na iteratory związane list) tylko wspierać równość kontrolujący (== i !=). Korzystając z !=, można później wymienić kontener bez zmiany kodu, co jest szczególnie ważne w przypadku kodu szablonu, który musi działać z wieloma różnymi typami kontenerów.

7

Istnieją różne typy iteratorów. Tylko iteratory z dostępem swobodnym obsługują operatora <. Inne typy iteratorów (dwukierunkowe, wejściowe, wyjściowe i do przodu) nie. Ale wszystkie iteratory obsługują operatory == i !=. Dlatego Twój kod będzie działał ze wszystkimi typami iteratorów, jeśli użyjesz !=.

5

Ten pierwszy działa tylko dla iteratorów obsługujących operator <, których nie wszystkie iteratory.