iterator Class
class QSet::iteratorDie Klasse QSet::iterator bietet einen STL-ähnlichen nicht-konstanten Iterator für QSet. Mehr...
Öffentliche Typen
Öffentliche Funktionen
iterator() | |
iterator(const QSet<T>::iterator &other) | |
bool | operator!=(const QSet<T>::iterator &other) const |
bool | operator!=(const QSet<T>::const_iterator &other) const |
const T & | operator*() const |
QSet<T>::iterator & | operator++() |
QSet<T>::iterator | operator++(int) |
const T * | operator->() const |
QSet<T>::iterator & | operator=(const QSet<T>::iterator &other) |
bool | operator==(const QSet<T>::iterator &other) const |
bool | operator==(const QSet<T>::const_iterator &other) const |
Detaillierte Beschreibung
QSet bietet sowohl Iteratoren im STL-Stil als auch Iteratoren im Java-Stil. Die Iteratoren im STL-Stil sind einfacher und umständlicher in der Anwendung; andererseits sind sie etwas schneller und haben für Entwickler, die die STL bereits kennen, den Vorteil der Vertrautheit.
QSet<T>::iterator ermöglicht es, über eine QSet zu iterieren und Elemente zu entfernen (mit QSet::erase()), während Sie iterieren. (QSet erlaubt es nicht, einen Wert durch einen Iterator zu ändern, da dies möglicherweise eine Verschiebung des Wertes in der internen Hash-Tabelle erfordert, die von QSet verwendet wird). Wenn Sie über eine Konstante QSet iterieren wollen, sollten Sie QSet::const_iterator verwenden. Es ist im Allgemeinen eine gute Praxis, QSet::const_iterator auch für eine Nicht-Konstante QSet zu verwenden, es sei denn, Sie müssen QSet durch den Iterator ändern. Konst-Iteratoren sind etwas schneller und können die Lesbarkeit des Codes verbessern.
Der Standard-Konstruktor QSet::iterator erzeugt einen nicht initialisierten Iterator. Sie müssen ihn mit einer Funktion wie QSet::begin(), QSet::end() oder QSet::insert() initialisieren, bevor Sie mit der Iteration beginnen können. Hier ist eine typische Schleife, die alle in einer Menge gespeicherten Elemente ausgibt:
QSet<QString> set = {"Januar", "Februar", ... "Dezember"}// i ist ein QSet<QString>::Iteratorfor(auto i = set.begin(), end = set.end(); i != end;++i) qDebug() << *i;
Hier ist eine Schleife, die beim Iterieren bestimmte Elemente (alle, die mit "J" beginnen) aus einer Menge entfernt:
QSet<QString> set = {"January", "February", ... "December"}; auto i = set.begin(); while (i != set.end()) { if ((*i).startsWith('J')) { i = set.erase(i); } else { ++i; } }
STL-artige Iteratoren können als Argumente für generic algorithms verwendet werden. So kann man beispielsweise mit dem qFind()-Algorithmus ein Element in der Menge finden:
QSet<QString> set; ... const auto predicate = [](const QString &s) { return s.compare("Jeanette", Qt::CaseInsensitive) == 0; }; QSet<QString>::iterator it = std::find_if(set.begin(), set.end(), predicate); if (it != set.end()) cout << "Found Jeanette" << endl;
Mehrere Iteratoren können für dieselbe Menge verwendet werden.
Warnung: Iteratoren auf implizit gemeinsam genutzten Containern funktionieren nicht genau wie STL-Iteratoren. Sie sollten es vermeiden, einen Container zu kopieren, während Iteratoren auf diesem Container aktiv sind. Für weitere Informationen lesen Sie Implizite gemeinsame Nutzung von Iteratoren.
Siehe auch QSet::const_iterator und QMutableSetIterator.
Dokumentation der Mitgliedstypen
iterator::iterator_category
Synonyme für std::bidirectional_iterator_tag, die anzeigen, dass diese Iteratoren bidirektionale Iteratoren sind.
Dokumentation der Mitgliedsfunktionen
iterator::iterator()
Konstruiert einen uninitialisierten Iterator.
Funktionen wie operator*() und operator++() sollten nicht mit einem nicht initialisierten Iterator aufgerufen werden. Verwenden Sie operator=(), um ihm einen Wert zuzuweisen, bevor Sie ihn verwenden.
Siehe auch QSet::begin() und QSet::end().
iterator::iterator(const QSet<T>::iterator &other)
Konstruiert eine Kopie von other.
QSet<T>::iterator &iterator::operator=(const QSet<T>::iterator &other)
Weist other diesem Iterator zu.
const T &iterator::operator*() const
Gibt einen Verweis auf das aktuelle Element zurück.
Siehe auch operator->().
const T *iterator::operator->() const
Gibt einen Zeiger auf das aktuelle Element zurück.
Siehe auch operator*().
bool iterator::operator==(const QSet<T>::iterator &other) const
Gibt true
zurück, wenn other auf dasselbe Element wie dieser Iterator zeigt; andernfalls wird false
zurückgegeben.
Siehe auch operator!=().
bool iterator::operator!=(const QSet<T>::const_iterator &other) const
bool iterator::operator==(const QSet<T>::const_iterator &other) const
Dies ist eine überladene Funktion.
bool iterator::operator!=(const QSet<T>::iterator &other) const
Gibt true
zurück, wenn other auf ein anderes Element als diesen Iterator zeigt; andernfalls wird false
zurückgegeben.
Siehe auch operator==().
QSet<T>::iterator &iterator::operator++()
Der Präfix-Operator ++ (++it
) verschiebt den Iterator zum nächsten Element in der Menge und gibt einen Iterator zum neuen aktuellen Element zurück.
Der Aufruf dieser Funktion auf QSet<T>::constEnd() führt zu undefinierten Ergebnissen.
QSet<T>::iterator iterator::operator++(int)
Dies ist eine überladene Funktion.
Der Postfix-Operator ++ (it++
) setzt den Iterator auf das nächste Element in der Menge und gibt einen Iterator auf das zuvor aktuelle Element zurück.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.