Heim >php教程 >PHP开发 >Verwendung von Iterator im C++-STL-Standardcontainer

Verwendung von Iterator im C++-STL-Standardcontainer

高洛峰
高洛峰Original
2016-12-13 17:33:521265Durchsuche

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.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Verwendung von s:iteratorNächster Artikel:Verwendung von s:iterator