QLinkedList::iterator Class
class QLinkedList::iteratorDie Klasse „ QLinkedList::iterator “ stellt einen nicht-konstanten Iterator im STL-Stil für „ QLinkedList “ bereit. Mehr...
Öffentliche Funktionen
| iterator() | |
| bool | operator!=(const QLinkedList<T>::const_iterator &other) const |
| bool | operator!=(const QLinkedList<T>::iterator &other) const |
| T & | operator*() const |
| QLinkedList<T>::iterator | operator+(int j) const |
| QLinkedList<T>::iterator & | operator++() |
| QLinkedList<T>::iterator | operator++(int) |
| QLinkedList<T>::iterator & | operator+=(int j) |
| QLinkedList<T>::iterator | operator-(int j) const |
| QLinkedList<T>::iterator & | operator--() |
| QLinkedList<T>::iterator | operator--(int) |
| QLinkedList<T>::iterator & | operator-=(int j) |
| T * | operator->() const |
| bool | operator==(const QLinkedList<T>::const_iterator &other) const |
| bool | operator==(const QLinkedList<T>::iterator &other) const |
Ausführliche Beschreibung
QLinkedList bietet sowohl Iteratoren im STL-Stil als auch Iteratoren im Java-Stil. Die Iteratoren im STL-Stil sind eher auf niedrigerer Ebene angesiedelt und umständlicher in der Verwendung; andererseits sind sie etwas schneller und bieten Entwicklern, die bereits mit der STL vertraut sind, den Vorteil der Vertrautheit.
QLinkedListMit <T>::iterator können Sie eine „ QLinkedList “ <T> durchlaufen und das mit dem Iterator verknüpfte Listenelement ändern. Wenn Sie eine `const`-Liste ` QLinkedList` durchlaufen möchten, verwenden Sie stattdessen ` QLinkedList::const_iterator `. Es ist generell empfehlenswert, ` QLinkedList::const_iterator ` auch für eine nicht-konstante Liste ` QLinkedList ` zu verwenden, es sei denn, Sie müssen die Liste ` QLinkedList ` über den Iterator ändern. Konstante Iteratoren sind etwas schneller und können die Lesbarkeit des Codes verbessern.
Der Standardkonstruktor von ` QLinkedList::iterator ` erstellt einen nicht initialisierten Iterator. Sie müssen ihn mit einer Funktion wie ` QLinkedList::begin()`, ` QLinkedList::end()` oder ` QLinkedList::insert()` initialisieren, bevor Sie mit der Iteration beginnen können. Hier ist eine typische Schleife, die alle in einer Liste gespeicherten Elemente ausgibt:
QLinkedList<QString> list;
list.append("January");
list.append("February");
...
list.append("December");
QLinkedList<QString>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
cout << *i << Qt::endl;Iteratoren im STL-Stil können als Argumente für ` generic algorithms` verwendet werden. So können Sie beispielsweise ein Element in der Liste finden:
QLinkedList<QString> list;
...
QLinkedList<QString>::iterator it = std::find(list.begin(),
list.end(), "Joel");
if (it != list.end())
cout << "Found Joel" << Qt::endl;Sehen wir uns einige Beispiele dafür an, was wir mit einem ` QLinkedList::iterator ` tun können, was mit einem ` QLinkedList::const_iterator` nicht möglich ist. Hier ist ein Beispiel, das jeden in einem ` QLinkedList<int>` gespeicherten Wert um 2 erhöht:
QLinkedList<int>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
*i += 2;Hier ist ein Beispiel, das alle Elemente aus einer ` QLinkedList` `<QString>` entfernt, die mit einem Unterstrich beginnen:
QLinkedList<QString> list;
...
QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
if ((*i).startsWith('_'))
i = list.erase(i);
else
++i;
}Der Aufruf von ` QLinkedList::erase()` entfernt das Element, auf das der Iterator zeigt, aus der Liste und gibt einen Iterator auf das nächste Element zurück. Hier ist eine weitere Möglichkeit, ein Element während der Iteration zu entfernen:
QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
QLinkedList<QString>::iterator previous = i;
++i;
if ((*previous).startsWith('_'))
list.erase(previous);
}Man könnte versucht sein, folgenden Code zu schreiben:
// WRONG
while (i != list.end()) {
if ((*i).startsWith('_'))
list.erase(i);
++i;
}Dies kann jedoch bei ` ++i` zu einem Absturz führen, da ` i ` nach dem Aufruf von ` erase()` ein „dangling iterator“ ist.
Für dieselbe Liste können mehrere Iteratoren verwendet werden. Wenn Sie Elemente zur Liste hinzufügen, bleiben bestehende Iteratoren gültig. Wenn Sie Elemente aus der Liste entfernen, werden Iteratoren, die auf die entfernten Elemente verweisen, zu „dangling Iteratoren“.
Warnung: Iteratoren auf implizit gemeinsam genutzten Containern funktionieren nicht genau wie STL-Iteratoren. Sie sollten das Kopieren eines Containers vermeiden, solange Iteratoren auf diesem Container aktiv sind. Weitere Informationen finden Sie unter „Problem mit Iteratoren bei impliziter gemeinsamen Nutzung“.
Siehe auch „ QLinkedList::const_iterator “ und „ QMutableLinkedListIterator “.
Dokumentation zu Mitgliedsfunktionen
iterator::iterator()
Erstellt einen nicht initialisierten Iterator.
Funktionen wie operator*() und operator++() sollten nicht auf einem nicht initialisierten Iterator aufgerufen werden. Verwenden Sie operator=(), um ihm vor der Verwendung einen Wert zuzuweisen.
Siehe auch ` QLinkedList::begin()` und ` QLinkedList::end()`.
bool iterator::operator!=(const QLinkedList<T>::const_iterator &other) const
bool iterator::operator!=(const QLinkedList<T>::iterator &other) const
Gibt „ true “ zurück, wenn „ other “ auf ein anderes Element als diesen Iterator verweist; andernfalls wird „ false “ zurückgegeben.
Siehe auch operator==().
T &iterator::operator*() const
Gibt eine veränderbare Referenz auf das aktuelle Element zurück.
Sie können den Wert eines Elements ändern, indem Sie den Operator *() auf der linken Seite einer Zuweisung verwenden, zum Beispiel:
if (*it == "Hello")
*it = "Bonjour";Siehe auch ` operator->()`.
QLinkedList<T>::iterator iterator::operator+(int j) const
Gibt einen Iterator für das Element zurück, das sich „ j “ Positionen vor diesem Iterator befindet. (Ist „ j “ negativ, bewegt sich der Iterator rückwärts.)
Diese Operation kann bei großen Werten für ` j ` langsam sein.
Siehe auch operator-().
QLinkedList<T>::iterator &iterator::operator++()
Der Präfixoperator ++ (++it) verschiebt den Iterator zum nächsten Element der Liste und gibt einen Iterator auf das neue aktuelle Element zurück.
Der Aufruf dieser Funktion auf ` QLinkedList::end()` führt zu undefinierten Ergebnissen.
Siehe auch ` operator--()`.
QLinkedList<T>::iterator iterator::operator++(int)
Der Postfix-Operator ++ (it++) verschiebt den Iterator zum nächsten Element in der Liste und gibt einen Iterator auf das zuvor aktuelle Element zurück.
Dies ist eine überladene Funktion.
QLinkedList<T>::iterator &iterator::operator+=(int j)
Bewegt den Iterator um j Elemente vorwärts. (Ist j negativ, bewegt sich der Iterator rückwärts.)
Siehe auch ` operator-=()` und ` operator+()`.
QLinkedList<T>::iterator iterator::operator-(int j) const
Gibt einen Iterator für das Element zurück, das sich j Positionen rückwärts von diesem Iterator befindet. (Ist j negativ, bewegt sich der Iterator vorwärts.)
Diese Operation kann bei großen Werten für ` j ` langsam sein.
Siehe auch operator+().
QLinkedList<T>::iterator &iterator::operator--()
Der Präfix-Operator (--it) macht das vorhergehende Element zum aktuellen Element und gibt einen Iterator auf das neue aktuelle Element zurück.
Der Aufruf dieser Funktion auf ` QLinkedList::begin()` führt zu undefinierten Ergebnissen.
Siehe auch operator++().
QLinkedList<T>::iterator iterator::operator--(int)
Der Postfix-Operator (it--) macht das vorangehende Element zum aktuellen Element und gibt einen Iterator auf das zuvor aktuelle Element zurück.
Dies ist eine überladene Funktion.
QLinkedList<T>::iterator &iterator::operator-=(int j)
Bewegt den Iterator um j Elemente zurück. (Ist j negativ, bewegt sich der Iterator vorwärts.)
Siehe auch ` operator+=()` und ` operator-()`.
T *iterator::operator->() const
Gibt einen Zeiger auf das aktuelle Element zurück.
Siehe auch „ operator*()“.
bool iterator::operator==(const QLinkedList<T>::const_iterator &other) const
bool iterator::operator==(const QLinkedList<T>::iterator &other) const
Gibt „ true “ zurück, wenn „ other “ auf dasselbe Element wie dieser Iterator verweist; andernfalls wird „ false “ zurückgegeben.
Siehe auch operator!=().
© 2026 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.