Jest to problematyczne w wypadku indeksowania, gdyż trzeba zmodyfikować zmienne indeksowe.
Zdolność kontenera do bycia modyfikowanym w trakcie iteracji po jego elementach stało się konieczne w nowoczesnym programowaniu obiektowym, gdzie zależności pomiędzy obiektami i skutkami operacji mogą nie być oczywiste. Użycie iteratora izoluje od tego rodzaju problemów.
Iteratory domyślne Niektóre języki obiektowe, np. Perl czy Python posiadają wbudowane mechanizmy iteracji po elementach kontenera bez wprowadzania jawnego obiektu iteratora. Przejawia się to zwykle istnieniem jakiegoś rodzaju operatora for-each, jak w poniższych przykładach:
# Perl, iteracja wbudowana foreach $val (@list) { print "$val\n"; }
# Python, iteracja wbudowana for Value in List: print Value W języku C++ występuje także szablon funkcji std::for_each() pozwalający na podobną iterację, wymaga jednak podania jawnego obiektu iteratora na wejściu.
Generatory Generator jest specjalnym rodzajem iteratora, w którym kontener nie jest kompletny. Pozwala to na przetwarzanie element po elemencie kolekcji abstrakcyjnych lub nawet nieskończonych. Generatory są powszechne w językach funkcyjnych oraz w językach, które zapożyczają niektóre idee programowania funkcyjnego.