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
package java.util; public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }
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
map<int,int> amap; amap.insert(pair<int,int>(1,1)); amap.insert(pair<int.int>(2,2)); map<int,int>::iterator it; for(it = amap.begin();it != ampa.end();it++)//从前向后 { cout<<"key:"<<it->first<<" value:"<<it->second<<endl;
Cpp-Code
}
Cpp-Code
map<int,int>::reverse_iterator rit; for(rit = amap.rbegin();rit != amap.rend();rit++)//从后向前 { cout<<"key:"<<rit->first<<" value:"<<rit->second<<endl; }
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.