Wzorzec projektowy iterator należy do wzorców czynnościowych. Jego celem jest udostępnienie jednolitego interfejsu umożliwiającego iterowanie po elementach znajdujących się wewnątrz danej klasy. W językach udostępniających pętle foreach istnieje możliwość zaimplementowania w swojej własnej klasie iteracji obsługiwanej przez tą pętlę poprzez dziedziczenie i obsłużenie odpowiedniego interfejsu. W C# jest to interfejs iEnumerable. W C++ sprawa wygląda nieco inaczej, gdyż w tym języku nie ma pętli foreach, lecz zasada pozostaje wbrew pozorom taka sama (zamiast foreach używa się do while.
Na poniższym diagramie głównym elementem jest klasa Stack, która dziedziczy po interfejsie iIterative. Interfejs ten ma jedną metodę czysto wirtualną iterator, którą klasa Stack musi obsłużyć. Celem tejże metody jest zwrócenie interfejsu iIterator, który dziedziczony jest przez klasę StackIterator. Klasa ta (w tym przypadku) jest wykorzystywana w przebiegły skądinąd sposób do tworzenia elementów stosu klasy Stack.
W rozpatrywanym przypadku interfejs iIterative jest używany jako argument trzech funkcji iterujących po elementach stosu:
sum - sumuje elementy stosu;
write - wypisuje elementy stosu;
average - zwraca średnią elementów stosu
Powyższe funkcje wykorzystują interfejs iIterative w celu pozyskania interfejsu iIterator, co z kolei umożliwia iterację po elementach stosu.