Die meisten Standardcontainer von C++ STL bieten einen Iterator. Einige Container, wie z. B. „priority_queue“, verfügen nicht über einen Iterator, da sie semantisch gesehen kein zufälliges Durchlaufen von Elementen im Container zulassen sollten.
Unter den 23 klassischen Entwurfsmustern gibt es das Iteratormuster, und auch das Java Collection Framework implementiert dieses Muster:
Java-Code
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Der Iterator von C++ ist besser als Java ist flexibler, was sich hauptsächlich in Folgendem widerspiegelt:
1. Java verfügt neben Front-to-Back-Iteratoren auch über Back-to-Back-Iteratoren, z :
Cpp-Code
1 2 3 4 5 6 7 |
|
Cpp-Code
1 |
|
Cpp-Code
1 2 3 4 5 |
|
2. Zusätzlich zum Iterator bietet C++ auch const_iterator , letzterer kann die Daten in der Sammlung nur lesen, aber ihren Wert nicht ändern
3 Der Iterator von Java scheint nur in einem einzigen Schritt inkrementieren zu können außer Darüber hinaus können auch arithmetische Operationen wie +n, -n implementiert werden, was für Szenarien, in denen ein Element zufällig gelesen werden muss, sehr nützlich ist. Es scheint jedoch, dass nur der Iterator des Vektors arithmetische Operationen unterstützt. Mit anderen Worten: Der Iterator it im vorherigen Beispiel kann keine Operationen wie it = it+n ausführen. Dies ist wichtig, sich daran zu erinnern.