<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Iterator</id>
	<title>Iterator - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Iterator"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Iterator&amp;action=history"/>
	<updated>2026-05-22T11:18:45Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Iterator&amp;diff=746896&amp;oldid=prev</id>
		<title>imported&gt;Tubsyq: /* growthexperiments-addlink-summary-summary:1|0|0 */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Iterator&amp;diff=746896&amp;oldid=prev"/>
		<updated>2025-07-01T05:20:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:1|0|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der Begriff &amp;#039;&amp;#039;&amp;#039;Iterator&amp;#039;&amp;#039;&amp;#039; stammt aus dem Bereich der [[Softwareentwicklung]] und bezeichnet einen [[Zeiger (Informatik)|Zeiger]], mit dem die Elemente einer Menge durchlaufen werden können (z.&amp;amp;nbsp;B. eine Liste). Der Begriff leitet sich aus der mathematischen Methode der [[Iteration]] ab. Der Iterator wird insbesondere im Bereich der [[Relationale Datenbank|Datenbanken]] meist &amp;#039;&amp;#039;&amp;#039;Cursor&amp;#039;&amp;#039;&amp;#039; genannt.&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
Ein Iterator ist ein spezieller Zeiger, der innerhalb eines Programms vom Software-Entwickler dazu verwendet werden kann, auf Elemente einer Menge, vereinfacht eine Liste, zuzugreifen. Iteratoren arbeiten nach dem Grundprinzip „Wenn es ein weiteres Element in der Liste gibt, dann stelle es zur Verfügung.“&lt;br /&gt;
&lt;br /&gt;
Dies ist vereinfacht damit vergleichbar, wie man einen Text, der eine Liste von Worten ist, liest: „Wenn es ein nächstes Wort gibt, dann lies es. Wenn kein weiteres Wort mehr folgt, ist der Text beendet.“ In jedem als Iteration bezeichneten Zugriffsschritt steht somit exakt ein Wort des Textes zur Bearbeitung zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Viele der in der Programmierpraxis verwendeten Iteratoren stellen über die lesende Zugriffsmöglichkeit hinaus Mechanismen zur Verfügung, die ein aktuell gelesenes Element aus der Liste entfernen oder ein neues Element in die Liste aufnehmen, so wie bei der Bearbeitung eines Textes Worte eingefügt oder gelöscht werden können.&lt;br /&gt;
&lt;br /&gt;
=== Externe Iteratoren und das Iterator-Entwurfsmuster ===&lt;br /&gt;
{{Hauptartikel|Iterator (Entwurfsmuster)}}&lt;br /&gt;
&lt;br /&gt;
Ein externer Iterator kann als eine Art Zeiger betrachtet werden, der zwei primäre Funktionen besitzt: ein bestimmtes Element in einer Menge von Objekten referenzieren ({{lang|en|&amp;#039;&amp;#039;element access&amp;#039;&amp;#039;}} genannt) sowie durch Selbstmodifizierung auf das nächste Element in der Menge zeigen ({{lang|en|&amp;#039;&amp;#039;element traversal&amp;#039;&amp;#039;}} genannt). Abhängig von der verwendeten Programmiersprache und der Anwendung können Iteratoren zusätzliche Funktionalität sowie verschiedenes Verhalten aufweisen.&lt;br /&gt;
&lt;br /&gt;
Der Hauptzweck des Iterators besteht darin, dem Benutzer zu erlauben, auf jedes Element in einer Menge zuzugreifen, während es ihn von der [[Datenstruktur]] der Menge isoliert. Dies befähigt die Menge, die Elemente auf jede mögliche Art und Weise zu verwalten, während sie sich dem Benutzer gegenüber so verhält, als wäre sie eine simple Sequenz oder eine Liste. Eine Iteratorklasse wird in enger Koordination mit ihrer Containerklasse, also ihrer Menge, entworfen. Üblicherweise stellt die Containerklasse die Funktionen zur Verfügung, die zur Erstellung von Iteratoren benutzt werden. Ein Zähler in einer Schleife (auch Loop Counter genannt) wird manchmal auch als Schleifeniterator bezeichnet. Dabei ist zu beachten, dass ein solcher Zähler nur die &amp;#039;&amp;#039;element-traversal&amp;#039;&amp;#039;-Funktionalität abbildet und nicht die &amp;#039;&amp;#039;element-access&amp;#039;&amp;#039;-Funktionalität.&lt;br /&gt;
&lt;br /&gt;
=== Implizite Iteratoren ===&lt;br /&gt;
Mehrere objektorientierte Sprachen wie [[Perl (Programmiersprache)|Perl]], [[Python (Programmiersprache)|Python]], [[C (Programmiersprache)|C#]], [[Ruby (Programmiersprache)|Ruby]] sowie neuere [[Java (Programmiersprache)|Java]]- und [[Object Pascal|Delphi]]-Versionen stellen eine [[intrinsisch]]e Art zur Verfügung, durch Elemente zu iterieren, ohne dabei ein explizites Iteratorobjekt zu benutzen. Dieses kann allerdings auch vorhanden sein, ist aber nicht im Code der jeweiligen Programmiersprache verfügbar, wenn dies der Fall sein sollte.&lt;br /&gt;
&lt;br /&gt;
Implizite Iteratoren manifestieren sich oft durch den for_each-Befehl oder seine Äquivalente, wie unten stehendes Python-Beispiel zeigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for value in iterable:&lt;br /&gt;
    print(value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Die Menge/Liste &amp;lt;code&amp;gt;iterable&amp;lt;/code&amp;gt; wird mittels der &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife durchlaufen; in jedem Schleifendurchlauf enthält die Variable &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; jeweils das aktuelle Element aus &amp;lt;code&amp;gt;iterable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Manchmal werden Iteratoren auch direkt vom Objekt der Datensammlung generiert, wie unten stehendes Ruby-Beispiel zeigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
iterable.each do |value|&lt;br /&gt;
    puts value&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der Aufruf der Methode &amp;lt;code&amp;gt;each&amp;lt;/code&amp;gt; der Menge/Liste &amp;lt;code&amp;gt;iterable&amp;lt;/code&amp;gt; liefert einen Iterator, den die &amp;lt;code&amp;gt;do&amp;lt;/code&amp;gt;-Schleife Element für Element abschreitet. Für jedes Element wird der Schleifenkörper &amp;lt;code&amp;gt;puts value&amp;lt;/code&amp;gt; ausgeführt, wobei die Variable &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; das jeweils aktuelle Element enthält.&lt;br /&gt;
&lt;br /&gt;
Dieser Iterationsstil wird auch &amp;#039;&amp;#039;internal iteration&amp;#039;&amp;#039; genannt, da sein Code vollständig im Kontext des zu iterierenden Objektes ausgeführt wird. Dieses kontrolliert somit sämtliche Aspekte der Iteration, der jeweilige Benutzer respektive Programmierer stellt nur die Operation für die einzelnen Iterationsschritte zur Verfügung, indem er eine [[anonyme Subroutine]] benutzt.&lt;br /&gt;
&lt;br /&gt;
Sprachen, welche sogenannte &amp;#039;&amp;#039;[[List Comprehension|Listenkomprehensionen]]&amp;#039;&amp;#039; oder ähnliche Konstrukte unterstützen, bedienen sich analog zu Python ebenfalls der impliziten Iteratoren während der Erstellung der Resultatsliste:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
names = [person.name for person in roster if person.male]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;for ... in ...&amp;lt;/code&amp;gt; ist hier die „Schleife“ über der Menge/Liste &amp;lt;code&amp;gt;roster&amp;lt;/code&amp;gt; mit „aktuelles-Element-Variable“ &amp;lt;code&amp;gt;person&amp;lt;/code&amp;gt;. Für jedes Element wird geprüft, ob (für das Element) eine Bedingung zutrifft (&amp;lt;code&amp;gt;if person.male&amp;lt;/code&amp;gt;), die Menge wird also gefiltert. Von den verbleibenden Elementen wird jeweils &amp;lt;code&amp;gt;person.name&amp;lt;/code&amp;gt; in die Ergebnisliste &amp;lt;code&amp;gt;names&amp;lt;/code&amp;gt; übernommen – eine Liste der Namen.&lt;br /&gt;
&lt;br /&gt;
Manchmal ist die implizite, versteckte Natur nur teilweise vorhanden. Die Programmiersprache [[C++]] stellt die for_each-Funktionalität über Funktions[[Template (C++)|templates]] zur Verfügung, und diese erlaubt die implizite Iteration.&lt;br /&gt;
&lt;br /&gt;
=== Der Gegensatz zum Indizieren ===&lt;br /&gt;
Der Iterator steht dabei im Gegensatz zu einem Index oder [[Nummerung|Schlüssel]]:&lt;br /&gt;
* Über einen Iterator kann man direkt auf das zugehörige Element zugreifen, ohne die Datenstruktur selber zu kennen. Bei einem Index benötigt man immer Index &amp;#039;&amp;#039;und&amp;#039;&amp;#039; Datenstruktur.&lt;br /&gt;
* Ein Iterator ist nur für genau eine Datenstruktur gültig. Ein Index kann auf andere Datenstrukturen übertragen werden.&lt;br /&gt;
* Iteratoren lassen sich nicht [[Serialisierung|serialisieren]]. Sie müssen dazu erst in einen Index umgewandelt werden.&lt;br /&gt;
&lt;br /&gt;
Die Fähigkeit eines Containers zur Selbstmodifizierung, während durch seine Elemente iteriert wird, hat sich in modernen, objektorientierten Programmiersprachen als wichtig erwiesen. Die Beziehungen zwischen den einzelnen Objekten und zwischen den Effekten ihrer Operationen sind in solchen Sprachen nicht mehr eindeutig. Um dieses Problem zu lösen, werden Iteratoren eingesetzt.&lt;br /&gt;
&lt;br /&gt;
=== Generatoren ===&lt;br /&gt;
Ein Generator ist eine spezielle Form einer [[Koroutine]], die bei jedem Aufruf ein (oder mehrere) Element(e) einer Folge liefert. Diese Folge kann eine gegebene Liste sein, dann entspricht der Generator weitgehend einem Iterator. Ein Generator kann die (nächsten) Elemente aber auch erst beim jeweiligen Aufruf erzeugen – dann benötigt er &amp;#039;&amp;#039;keine&amp;#039;&amp;#039; bestehende Liste, wie sie beim Iterator notwendig ist.&lt;br /&gt;
&lt;br /&gt;
Die meisten Iteratoren lassen sich in natürlicher, intuitiver Art und Weise durch Generatoren implementieren. Da Generatoren ihren lokalen Status zwischen Funktionsaufrufen beibehalten, eignen sie sich hervorragend zur Implementierung von komplexen zustandsorientierten Iteratoren wie beispielsweise [[Binärbaum#Traversierung|Binärbaumtraversierern]].&lt;br /&gt;
&lt;br /&gt;
Beispiel für einen Generator, der Elemente &amp;#039;&amp;#039;erzeugt,&amp;#039;&amp;#039; statt sie aus einer Liste zu lesen:&lt;br /&gt;
&lt;br /&gt;
([[Fibonacci-Folge]]; „Rückgabe“ des jeweiligen Werts mit Hilfe des Python-Befehls &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt;)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ein Generator für die Fibonacci-Folge&lt;br /&gt;
def fibonacci(limit_anzahl_elemente):&lt;br /&gt;
    a, b = 0, 1&lt;br /&gt;
&lt;br /&gt;
    for _ in range(limit_anzahl_elemente):&lt;br /&gt;
        a, b = b, a + b&lt;br /&gt;
        yield a&lt;br /&gt;
&lt;br /&gt;
# Die ersten Zahlen der Folge werden berechnet und ausgegeben&lt;br /&gt;
for number in fibonacci(100):&lt;br /&gt;
    print(number)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Iteratoren in verschiedenen Programmiersprachen ==&lt;br /&gt;
=== C# und andere .NET-Sprachen ===&lt;br /&gt;
Iteratoren im .NET-Framework werden als Enumeratoren bezeichnet und von der Schnittstelle &amp;lt;code&amp;gt;IEnumerator&amp;lt;/code&amp;gt; repräsentiert. &amp;lt;code&amp;gt;IEnumerator&amp;lt;/code&amp;gt; stellt eine Funktion namens &amp;lt;code&amp;gt;MoveNext()&amp;lt;/code&amp;gt; zur Verfügung, die jeweils zum nächsten Element der Menge geht und anzeigt, wenn das Ende erreicht ist, sowie eine Eigenschaft namens &amp;lt;code&amp;gt;Current&amp;lt;/code&amp;gt;, um den Wert des aktuellen Elementes zu erhalten. Des Weiteren wird eine optionale &amp;lt;code&amp;gt;Reset()&amp;lt;/code&amp;gt;-Funktion angeboten, damit an den Anfang zurückgekehrt werden kann. Der Enumerator gibt als Initialisierungswert einen speziellen Wert zurück, der den Anfang markiert. Aus diesem Grund ist es nötig, nach der Initialisierung &amp;lt;code&amp;gt;MoveNext()&amp;lt;/code&amp;gt; auszuführen.&lt;br /&gt;
&lt;br /&gt;
Enumeratoren werden typischerweise von einer &amp;lt;code&amp;gt;GetEnumerator()&amp;lt;/code&amp;gt; -Funktion zurückgegeben, welche einem Objekt zugehörig ist, das die &amp;lt;code&amp;gt;IEnumerable&amp;lt;/code&amp;gt;-Schnittstelle implementiert. Der for_each-Befehl in C# operiert allerdings auf jeder solchen Funktion, selbst wenn diese nicht von einem Objekt stammt, welches die &amp;lt;code&amp;gt;IEnumerable&amp;lt;/code&amp;gt;-Schnittstelle implementiert. Das folgende Beispiel zeigt eine simple Verwendung von Iteratoren in C# 2.0:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// explizite Version&lt;br /&gt;
IEnumerator&amp;lt;MyType&amp;gt; iter = list.GetEnumerator();&lt;br /&gt;
while (iter.MoveNext())&lt;br /&gt;
    Console.WriteLine(iter.Current);&lt;br /&gt;
&lt;br /&gt;
// implizite Version&lt;br /&gt;
foreach (MyType item in list)&lt;br /&gt;
    Console.WriteLine(item);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C# 2.0 unterstützt ebenfalls Generatoren: Eine Funktion, welche als &amp;lt;code&amp;gt;IEnumerable&amp;lt;/code&amp;gt; (oder auch &amp;lt;code&amp;gt;IEnumerator&amp;lt;/code&amp;gt;) zurückkehrt, aber den Befehl &amp;lt;code&amp;gt;yield return&amp;lt;/code&amp;gt; dabei benutzt, wird vom [[Compiler]] automatisch in eine neue Klasse umgewandelt, welche die angemessene Schnittstelle implementiert.&lt;br /&gt;
&lt;br /&gt;
=== C++ ===&lt;br /&gt;
Die Programmiersprache C++ setzt Iteratoren im großen Stil ein und stellt über die [[C++-Standardbibliothek]] Iteratoren verschiedener Typen wie sogenannte &amp;#039;&amp;#039;forward iterators&amp;#039;&amp;#039;, &amp;#039;&amp;#039;bidirectional iterators&amp;#039;&amp;#039; und &amp;#039;&amp;#039;random access iterators&amp;#039;&amp;#039; zur Verfügung. Jede der Standard-Containerklassen besitzt Iteratortypen. Die Syntax der Standarditeratoren wurde an die [[Zeiger (Informatik)|Zeigerarithmetik]] von C angelehnt. Die Operatoren &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;-&amp;amp;gt;&amp;lt;/code&amp;gt; werden zur Referenzierung der Elemente benutzt. Weitere Operatoren wie &amp;lt;code&amp;gt;++&amp;lt;/code&amp;gt; werden zum Navigieren durch die Elemente benutzt.&lt;br /&gt;
&lt;br /&gt;
Iteratoren werden üblicherweise paarweise eingesetzt. Der eine Iterator stellt die aktuelle Iteration dar, während der andere das Ende der Iteration darstellt. Die Iteratoren werden von der entsprechenden Containerklasse durch die Benutzung der Standardfunktionen &amp;lt;code&amp;gt;begin()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;end()&amp;lt;/code&amp;gt; generiert. Der Iterator, der durch &amp;lt;code&amp;gt;begin()&amp;lt;/code&amp;gt; zurückgegeben wird, zeigt auf das erste Element, während der Iterator, der von &amp;lt;code&amp;gt;end()&amp;lt;/code&amp;gt; zurückgeliefert wird, auf einen speziellen Wert zeigt, welcher kein Element referenziert. Wenn ein Iterator hinter das letzte Element gesetzt wird, gibt dieser den speziellen Wert von &amp;lt;code&amp;gt;end()&amp;lt;/code&amp;gt; zurück. Das folgende Beispiel zeigt die typische Definition und Verwendung eines Iterators in C++11:&amp;lt;ref&amp;gt;{{Literatur|Autor=Bjarne Stroustrup| Titel=Programming: Principles and Practice using C++| Auflage=2| Verlag=Addison-Wesley| Jahr=2014| ISBN=978-0-321-99278-9|Seiten=729 ff.}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;stdexcept&amp;gt;&lt;br /&gt;
#include &amp;lt;initializer_list&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
class Vector {&lt;br /&gt;
public:&lt;br /&gt;
  using iterator = double*;&lt;br /&gt;
  iterator begin() { return elem; }&lt;br /&gt;
  iterator end() { return elem + sz; }&lt;br /&gt;
&lt;br /&gt;
  Vector(std::initializer_list&amp;lt;double&amp;gt; lst) :elem(nullptr), sz(0) {&lt;br /&gt;
    sz = lst.size();&lt;br /&gt;
    elem = new double[sz];&lt;br /&gt;
    double* p = elem;&lt;br /&gt;
    for (auto i = lst.begin(); i != lst.end(); ++i, ++p) {&lt;br /&gt;
      *p = *i;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  ~Vector() { delete[] elem; }&lt;br /&gt;
  int size() const { return sz; }&lt;br /&gt;
  double&amp;amp; operator[](int n) {&lt;br /&gt;
    if (n &amp;lt; 0 || n &amp;gt;= sz) throw std::out_of_range(&amp;quot;Vector::operator[]&amp;quot;);&lt;br /&gt;
    return elem[n];&lt;br /&gt;
  }&lt;br /&gt;
  Vector(const Vector&amp;amp;) = delete; // Dreierregel&lt;br /&gt;
  Vector&amp;amp; operator=(const Vector&amp;amp;) = delete;&lt;br /&gt;
private:&lt;br /&gt;
  double* elem;&lt;br /&gt;
  int sz;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  Vector v = {1.1*1.1, 2.2*2.2};&lt;br /&gt;
&lt;br /&gt;
  for (const auto&amp;amp; x : v) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
  for (auto i = v.begin(); i != v.end(); ++i) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; *i &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
  for (auto i = 0; i &amp;lt;= v.size(); ++i) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; v[i] &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Programmausgabe ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
1.21&lt;br /&gt;
4.84&lt;br /&gt;
1.21&lt;br /&gt;
4.84&lt;br /&gt;
1.21&lt;br /&gt;
4.84&lt;br /&gt;
terminate called after throwing an instance of &amp;#039;std::out_of_range&amp;#039;&lt;br /&gt;
  what():  Vector::operator[]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es existieren viele verschiedene Iteratortypen mit leicht voneinander abweichendem Verhalten. Nicht jeder Iteratortyp unterstützt jeden Containertyp. Es ist allerdings für Programmierer möglich, eigene Iteratortypen zu definieren, indem sie eine Klasse vom Template &amp;lt;code&amp;gt;std::iterator&amp;lt;/code&amp;gt; ableiten. Die Iteratorsicherheit ist für die verschiedenen Typen separat definiert. Die implizite Iteration ist in C++ teilweise vorhanden und wird von den Funktionen &amp;lt;code&amp;gt;std::for_each()&amp;lt;/code&amp;gt;,&amp;lt;ref&amp;gt;[http://www.sgi.com/tech/stl/for_each.html &amp;lt;code&amp;gt;std::for_each()&amp;lt;/code&amp;gt;]&amp;lt;/ref&amp;gt; &amp;lt;code&amp;gt;std::copy()&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://www.sgi.com/tech/stl/copy.html &amp;lt;code&amp;gt;std::copy()&amp;lt;/code&amp;gt;]&amp;lt;/ref&amp;gt; und &amp;lt;code&amp;gt;std::accumulate()&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://www.sgi.com/tech/stl/accumulate.html &amp;lt;code&amp;gt;std::accumulate()&amp;lt;/code&amp;gt;]&amp;lt;/ref&amp;gt; zur Verfügung gestellt.&lt;br /&gt;
Iteratoren benötigen allerdings immer ein explizites Objekt zu ihrer Initialisierung, üblicherweise diejenigen, welche von &amp;lt;code&amp;gt;begin()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;end()&amp;lt;/code&amp;gt; zurückgegeben werden. Sobald diese ausgeführt wurde, geschieht die Iteration auf implizite Weise ohne weitere Benutzung des Iteratorobjekts. Das unten stehende Beispiel zeigt die Verwendung von for_each:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// Ein beliebiger Standard-Containertyp jedes ItemType Elements&lt;br /&gt;
ContainerType&amp;lt;ItemType&amp;gt; c;&lt;br /&gt;
&lt;br /&gt;
// Funktion, die Zugriff auf jedes Element besitzt&lt;br /&gt;
void processItem(const ItemType&amp;amp; i) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;#039;\n&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Eine for-each-Iterationsschleife&lt;br /&gt;
std::for_each(c.begin(), c.end(), processItem);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dasselbe kann durch den Einsatz von &amp;lt;code&amp;gt;std::copy&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;std::ostream_iterator&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://www.sgi.com/tech/stl/ostream_iterator.html &amp;lt;code&amp;gt;std::ostream_iterator&amp;lt;/code&amp;gt;]&amp;lt;/ref&amp;gt; erreicht werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::copy(C.begin(), C.end(), std::ostream_iterator&amp;lt;ItemType&amp;gt;(std::cout, &amp;quot;\n&amp;quot;));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Einschränkung dieser Technik ist, dass es dem Rumpf nicht erlaubt, inline deklariert zu sein. Zudem benötigt dies einen Funktionszeiger, welcher an anderer Stelle deklariert und als Parameter übergeben werden muss. Dies kann teilweise durch die Benutzung von Bibliotheken wie [[Boost (C++-Bibliothek)|Boost]] und der Anwendung von Lambda kompensiert werden, die zum Generieren von Funktionsobjekten mit verwandter Infix-Syntax gebraucht werden. Da diese Funktionalität nur über externe Bibliotheken zur Verfügung gestellt wird, müssen diverse Problemumgehungen, auch &amp;#039;&amp;#039;Workarounds&amp;#039;&amp;#039; genannt, eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
Die Schnittstelle java.util.Iterator,&amp;lt;ref&amp;gt;[http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html &amp;lt;code&amp;gt;java.util.Iterator&amp;lt;/code&amp;gt;] Java API Specification&amp;lt;/ref&amp;gt; die im [[Java-Technologie|Java]] JDK 1.2 eingeführt wurde, erlaubt das Iterieren von Containerklassen. Jeder &amp;lt;code&amp;gt;Iterator&amp;lt;/code&amp;gt; stellt Funktionen namens &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt;,&amp;lt;ref&amp;gt;[http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#next() &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt;] Java API Specification&amp;lt;/ref&amp;gt; &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#hasNext() &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt;] Java API Specification&amp;lt;/ref&amp;gt; sowie eine optionale Funktion namens &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#remove() &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt;] Java API Specification&amp;lt;/ref&amp;gt; zur Verfügung. Iteratoren werden üblicherweise von einer Funktion namens &amp;lt;code&amp;gt;iterator()&amp;lt;/code&amp;gt; generiert, welche von der dementsprechenden Containerklasse zur Verfügung gestellt wird.&lt;br /&gt;
Ein Iterator gibt als Initialisierungwert einen speziellen Wert zurück, der den Anfang markiert. Aus diesem Grund ist es nötig, nach der Initialisierung &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; auszuführen, womit das erste Element zurückgegeben wird. Die Funktion &amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt; wird dazu benutzt, herauszufinden, ob das letzte Element bereits zurückgegeben wurde. Das folgende Beispiel zeigt eine simple Verwendung von Iteratoren in Java:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Iterator iter = list.iterator();&lt;br /&gt;
&lt;br /&gt;
while (iter.hasNext())&lt;br /&gt;
    System.out.println(iter.next());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Kollektionen, die es unterstützen, entfernt die optionale Funktion &amp;lt;code&amp;gt;remove()&amp;lt;/code&amp;gt; das letzte Element, auf das zugegriffen wurde. Die meisten anderen Modifikationen dieser Art sind unsicher. Zusätzlich besitzt java.util.&amp;lt;code&amp;gt;List&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://docs.oracle.com/javase/7/docs/api/java/util/List.html &amp;lt;code&amp;gt;java.util.List&amp;lt;/code&amp;gt;] Java API Specification&amp;lt;/ref&amp;gt; einen Iterator namens &amp;lt;code&amp;gt;ListIterator&amp;lt;/code&amp;gt;,&amp;lt;ref&amp;gt;[http://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html &amp;lt;code&amp;gt;java.util.ListIterator&amp;lt;/code&amp;gt;] Java API Specification&amp;lt;/ref&amp;gt; welcher eine ähnliche Schnittstelle zur Verfügung stellt, die Vorwärts- und Rückwärtsiteration erlaubt sowie den Index des aktuellen Elementes zurückgibt und das Element an einer gegebenen Position einfügen kann.&lt;br /&gt;
&lt;br /&gt;
Mit der [[Java Platform, Standard Edition|J2SE]] 5.0 wurde die Schnittstelle &amp;lt;code&amp;gt;Iterable&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html &amp;lt;code&amp;gt;Iterable&amp;lt;/code&amp;gt;] Java API Specification&amp;lt;/ref&amp;gt; eingeführt, welche eine erweiterte [[for-Schleife]] im Sinne von for_each darstellt. &amp;lt;code&amp;gt;Iterable&amp;lt;/code&amp;gt; definiert die Funktion &amp;lt;code&amp;gt;iterator()&amp;lt;/code&amp;gt;,&amp;lt;ref&amp;gt;[http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html#iterator() &amp;lt;code&amp;gt;iterator()&amp;lt;/code&amp;gt;] Java API Specification&amp;lt;/ref&amp;gt; welche einen &amp;lt;code&amp;gt;Iterator&amp;lt;/code&amp;gt; zurückliefert. Mit der Benutzung der erweiterten for-Schleife kann das vorhergehende Beispiel auf folgende Art und Weise geschrieben werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for (MyType obj: list)&lt;br /&gt;
    System.out.print(obj);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MATLAB ===&lt;br /&gt;
[[Matlab|MATLAB]] unterstützt externe sowie interne Iteratoren. Im Falle einer externen Iteration, bei welcher der Benutzer dazu verpflichtet, ist das nächste Element bereitzustellen, können mehrere Elemente definiert und mit einer for-Schleife anschließend durchlaufen werden, wie folgendes Beispiel zeigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;&lt;br /&gt;
% Definition eines an integer arrays&lt;br /&gt;
myArray = [1, 3, 5, 7, 11, 13];&lt;br /&gt;
&lt;br /&gt;
for n = myArray&lt;br /&gt;
   % ... etwas mit n machen...&lt;br /&gt;
   disp(n) %Integerausgabe zur Kommandozeile&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Falle einer internen Iteration kann der Benutzer eine Operation dem Iterator übergeben und so auf jedes Element in einem Array zuzugreifen. Viele native Operatoren und MATLAB-Funktionen werden überladen, damit ein korrespondierendes Ausgabearray als impliziter Rückgabewert erhalten wird. Des Weiteren können die Funktionen &amp;#039;&amp;#039;&amp;lt;code&amp;gt;arrayfun&amp;lt;/code&amp;gt;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;lt;code&amp;gt;cellfun&amp;lt;/code&amp;gt;&amp;#039;&amp;#039; für benutzerdefinierte Operationen über native und sogenannte &amp;#039;&amp;#039;cell-Arrays&amp;#039;&amp;#039; gebraucht werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;matlab&amp;quot;&amp;gt;&lt;br /&gt;
function simpleFun&lt;br /&gt;
% Definition eines an integer arrays&lt;br /&gt;
myArray = [1, 3, 5, 7, 11, 13];&lt;br /&gt;
&lt;br /&gt;
% Benutzerdefinierte Operation für jedes Element durchführen&lt;br /&gt;
myNewArray = arrayfun(@(a)myCustomFun(a), myArray);&lt;br /&gt;
&lt;br /&gt;
% Arrayausgabe zur Kommandozeile&lt;br /&gt;
myNewArray&lt;br /&gt;
&lt;br /&gt;
function outScalar = myCustomFun(inScalar)&lt;br /&gt;
% Mit 2 multiplizieren&lt;br /&gt;
outScalar = 2 * inScalar;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ kann es wünschenswert sein, die Speichermechanismen des Arrays vom Programmieren zu abstrahieren, indem eine benutzerdefinierte, objektorientierte Implementierung des Iteratorentwurfsmusters zur Verfügung gestellt wird. Eine solche Implementierung, welche die externe Iteration unterstützt, wird im MATLAB Central File Exchange Item&amp;lt;ref&amp;gt;[http://www.mathworks.com.au/matlabcentral/fileexchange/25225 Entwurfsmuster: Iterator (Verhalten)]&amp;lt;/ref&amp;gt; angeboten. Dieses Entwurfsmuster ist nach der neuen Klassendefinitionssyntax geschrieben, welche mit der MATLAB Version 7.6 (R2008a) eingeführt wurde. Des Weiteren ist eine eindimensionale &amp;#039;&amp;#039;cell&amp;#039;&amp;#039;-Array-Realisierung des [[List Abstract Data Type]] enthalten, damit eine heterogene Speicherung jedes Datentyps erfolgt. Es stellt die Funktionalität zur Verfügung, mit der eine Liste mit &amp;#039;&amp;#039;&amp;lt;code&amp;gt;hasNext()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;lt;code&amp;gt;reset()&amp;lt;/code&amp;gt;&amp;#039;&amp;#039; in einer &amp;#039;&amp;#039;while&amp;#039;&amp;#039;-Schleife verarbeitet werden kann.&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
Mit PHP4 wurde ein &amp;lt;code&amp;gt;foreach&amp;lt;/code&amp;gt;-Konstrukt eingeführt, das ähnlich wie in Perl und vielen anderen Programmiersprachen aufgebaut war. Dieses Konstrukt erlaubt eine einfache Art über Arrays zu iterieren. Der &amp;lt;code&amp;gt;foreach&amp;lt;/code&amp;gt;-Befehl funktioniert nur mit Arrays in PHP4 und wird einen Fehler melden, wenn versucht wird, ihn über einen anderen [[Datentyp]] oder mit einer uninitialisierten Variable zu benutzen. In PHP5 ist der &amp;lt;code&amp;gt;foreach&amp;lt;/code&amp;gt;-Befehl zur Iteration über alle public members erlaubt.&lt;br /&gt;
Das folgende Beispiel zeigt zwei unterschiedliche Schreibweisen, die zweite ist eine nützliche Erweiterung zur ersten Schreibweise:&lt;br /&gt;
&lt;br /&gt;
;Beispiel A&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach (array_expression as $value)&lt;br /&gt;
    echo &amp;quot;$value\n&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Beispiel B&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach (array_expression as $key =&amp;gt; $value)&lt;br /&gt;
    echo &amp;quot;($key)$value\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Beispiel A wird über ein Array, welches von array_expression dargestellt wird, iteriert. Bei jedem Schleifendurchlauf wird der Wert des Arrayelements an &amp;lt;code&amp;gt;$value&amp;lt;/code&amp;gt; zugewiesen sowie der interne Zeiger des Arrays um eins nach vorne geschoben. Somit wird beim nächsten Schleifendurchlauf das nächste Arrayelement zurückgegeben.&lt;br /&gt;
Das Beispiel B besitzt dieselbe Funktionalität wie das Beispiel A. Zusätzlich wird der Index des Elementes bei jedem Schleifendurchlauf der Variable &amp;lt;code&amp;gt;$key&amp;lt;/code&amp;gt; zugewiesen.&lt;br /&gt;
&lt;br /&gt;
In PHP5 ist die Iteratorschnittstelle vordefiniert, Objekte können zur Handhabung der Iteration verändert werden.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class MyIterator implements Iterator {&lt;br /&gt;
    private $var = array();&lt;br /&gt;
&lt;br /&gt;
    public function __construct($array) {&lt;br /&gt;
        if (is_array($array)) {&lt;br /&gt;
            $this-&amp;gt;var = $array;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function rewind() {&lt;br /&gt;
        echo &amp;quot;rewinding\n&amp;quot;;&lt;br /&gt;
        reset($this-&amp;gt;var);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function current() {&lt;br /&gt;
        $var = current($this-&amp;gt;var);&lt;br /&gt;
        echo &amp;quot;current: $var\n&amp;quot;;&lt;br /&gt;
        return $var;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function key() {&lt;br /&gt;
        $var = key($this-&amp;gt;var);&lt;br /&gt;
        echo &amp;quot;key: $var\n&amp;quot;;&lt;br /&gt;
        return $var;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function next() {&lt;br /&gt;
        $var = next($this-&amp;gt;var);&lt;br /&gt;
        echo &amp;quot;next: $var\n&amp;quot;;&lt;br /&gt;
        return $var;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function valid() {&lt;br /&gt;
        $var = $this-&amp;gt;current() !== false;&lt;br /&gt;
        echo &amp;quot;valid: {$var}\n&amp;quot;;&lt;br /&gt;
        return $var;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Funktionen werden alle in einer kompletten &amp;lt;code&amp;gt;foreach($obj as $key=&amp;gt;$value)&amp;lt;/code&amp;gt;-Sequenz genutzt.&lt;br /&gt;
Die Iteratormethoden werden in der folgenden Reihenfolge ausgeführt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
  1. rewind()&lt;br /&gt;
  2. while valid()&lt;br /&gt;
     {&lt;br /&gt;
          2.1 current() in $value&lt;br /&gt;
          2.3 key() in $key&lt;br /&gt;
          2.4 next()&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
Iteratoren in Python stellen einen fundamentalen Teil der Sprache dar, allerdings werden sie vielfach implizit und somit unsichtbar in Sprachbefehlen versteckt genutzt. Solche Befehle sind z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;(foreach) in sogenannten list comprehensions und in Generatorausdrücken zu finden. Alle sequentiellen Basistypen sowie viele Klassen der Standardbibliothek in Python unterstützen Iterationen. Das folgende Beispiel zeigt eine typische Iteration über einer Sequenz:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for value in sequence:&lt;br /&gt;
    print(value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Python Dictionaries&amp;#039;&amp;#039;, eine Form von [[Assoziatives Array|assoziativem Array]] erlaubt es, direkt über sich zu iterieren, wenn die sogenannten &amp;#039;&amp;#039;dictionary keys&amp;#039;&amp;#039; zurückgegeben werden. Es kann aber auch über die &amp;#039;&amp;#039;items&amp;#039;&amp;#039;-Funktion eines dictionary iteriert werden, wo es die Werte dem nachfolgenden Beispiel entsprechend zu key und value zurückgibt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
for key in dictionary:&lt;br /&gt;
    value = dictionary[key]&lt;br /&gt;
    print(key, value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
for key, value in dictionary.items():&lt;br /&gt;
    print(key, value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iteratoren in Python können aber auch explizit definiert und benutzt werden. Für jeden iterierbaren Sequenztypen oder jede iterierbare Klasse steht die eingebaute &amp;lt;code&amp;gt;iter()&amp;lt;/code&amp;gt;-Funktion zum Iterieren eines Iteratorobjekts zur Verfügung. Mit dem Iteratorobjekt kann über die Funktionen &amp;lt;code&amp;gt;next()&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;__next__()&amp;lt;/code&amp;gt; zum nächsten Element navigiert werden. Ist das Ende der Menge erreicht, wird ein &amp;lt;code&amp;gt;StopIteration&amp;lt;/code&amp;gt;-Fehler aufgeworfen. Das nachfolgende Beispiel zeigt eine äquivalente Implementation von expliziten Iteratoren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
it = iter(sequence)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    try:&lt;br /&gt;
        value = it.next()&lt;br /&gt;
    except StopIteration:&lt;br /&gt;
        break&lt;br /&gt;
&lt;br /&gt;
    print(value)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jede benutzerdefinierte Klasse kann die Standarditeration unterstützen, wenn eine &amp;lt;code&amp;gt;_iter__()&amp;lt;/code&amp;gt;-Funktion definiert wurde, welche ein Iteratorobjekt generiert. Der Iterator muss dann eine &amp;lt;code&amp;gt; __next__()&amp;lt;/code&amp;gt; Funktion definieren, die das nächste Element zurückgibt. Die Python-Generatoren implementieren dieses Iterationsprotokoll.&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
Die Implementation der Iteratoren in Ruby unterscheidet sich von den meisten anderen Programmiersprachen: Alle Iterationen gehen dem Gedanken nach, sogenannte callback closures an Containermethoden durchzureichen. Auf diese Art und Weise implementiert Ruby nicht nur eine Basisfunktionalität an Iteratoren, sondern bildet viele Iteratorentwurfsmuster ab, wie z.&amp;amp;nbsp;B. sogenanntes &amp;#039;&amp;#039;function mapping&amp;#039;&amp;#039;, Filter und sogenanntes &amp;#039;&amp;#039;reducing&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Ruby unterstützt des Weiteren noch eine alternative Syntax für jede Basisfunktion zur Iteration:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
(0...42).each do |n|&lt;br /&gt;
    puts n&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
… und …&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
for n in 0...42&lt;br /&gt;
    puts n&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder noch kürzer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
42.times do |n|&lt;br /&gt;
    puts n&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rust ===&lt;br /&gt;
In Rust werden Iteratoren ebenfalls häufig implizit genutzt, jedoch ist auch das funktionale Programmieren mit expliziten Iteratoren möglich. Iteratoren werden in Rust [[Lazy Evaluation|bedarfsweise]] ausgewertet, d.h., alle Funktionen auf Iteratoren werden erst dann auf die eigentlichen Elemente angewendet, wenn sie ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Die for-Schleife ist ein Beispiel für die implizite Nutzung eines Iterators:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
let numbers = vec![24, 30, 13, 19, 12, 17];&lt;br /&gt;
&lt;br /&gt;
for number in numbers {&lt;br /&gt;
    println(&amp;quot;Zahl: {}&amp;quot;, number);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mithilfe von expliziten Iteratoren und anonymen Funktionen ist Rust mit einem funktionalen Paradigma nutzbar. Das folgende Beispiel zeigt, wie eine Funktion aussehen könnte, die die Summe der Quadrate aller ungeraden Zahlen von 1 bis zu einer bestimmten Zahl n berechnet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
fn sum_of_odd_squares_up_to(n: u32) -&amp;gt; u32 {&lt;br /&gt;
    (1..=n)               // Eine Range ist in Rust ein Iterator.&lt;br /&gt;
        .filter(n%2 == 1) // Alle geraden Zahlen werden verworfen.&lt;br /&gt;
        .map(|n| n.pow(2))     // Ersetze jede Zahl durch ihr Quadrat&lt;br /&gt;
        .sum()            // Berechne die Summe&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Iterator (Entwurfsmuster)|Iterator Entwurfsmuster]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* Joshua Gatcomb: [http://www.perl.com/pub/a/2005/06/16/iterators.html &amp;#039;&amp;#039;Understanding and Using Iterators&amp;#039;&amp;#039;.] (englisch)&lt;br /&gt;
* [http://www.csd.uwo.ca/~watt/pub/reprints/2006-wgp-jflow.pdf &amp;#039;&amp;#039;A Technique for Generic Iteration and Its Optimization&amp;#039;&amp;#039;.] (PDF; englisch; 216&amp;amp;nbsp;kB)&lt;br /&gt;
* [http://www.cprogramming.com/tutorial/stl/iterators.html &amp;#039;&amp;#039;STL Iterators&amp;#039;&amp;#039;.] (englisch)&lt;br /&gt;
* [http://www.phpro.org/tutorials/Introduction-to-SPL.html#2 &amp;#039;&amp;#039;What are iterators?&amp;#039;&amp;#039;] – [http://www.php.net/~helly/php/ext/spl/interfaceIterator.html#_details Referenzbeschreibung.] (englisch)&lt;br /&gt;
* [http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html Interface &amp;lt;code&amp;gt;Iterator&amp;lt;/code&amp;gt; Java API]&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/78dfe2yb.aspx .NET Interface] im [[Microsoft Developer Network|MSDN]]&lt;br /&gt;
* [http://www.boost.org/doc/libs/1_43_0/libs/iterator/doc/index.html Boost C++ Iterator Library] (englisch)&lt;br /&gt;
* [http://us3.php.net/manual/en/language.oop5.iterations.php PHP: Object Iteration] (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datentyp]]&lt;br /&gt;
[[Kategorie:Programmiersprachelement]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Tubsyq</name></author>
	</entry>
</feed>