<QtAlgorithms> - Generic Algorithms
Der <QtAlgorithms>-Header enthält die generischen, vorlagenbasierten Algorithmen. Mehr...
Header: | #include <QtAlgorithms> |
Funktionen
uint | qCountLeadingZeroBits(quint16 v) |
uint | qCountLeadingZeroBits(quint32 v) |
uint | qCountLeadingZeroBits(quint64 v) |
uint | qCountLeadingZeroBits(quint8 v) |
uint | qCountTrailingZeroBits(quint8 v) |
uint | qCountTrailingZeroBits(quint16 v) |
uint | qCountTrailingZeroBits(quint32 v) |
uint | qCountTrailingZeroBits(quint64 v) |
void | qDeleteAll(ForwardIterator begin, ForwardIterator end) |
void | qDeleteAll(const Container &c) |
uint | qPopulationCount(quint8 v) |
uint | qPopulationCount(quint16 v) |
uint | qPopulationCount(quint32 v) |
uint | qPopulationCount(quint64 v) |
Detaillierte Beschreibung
Qt bietet eine Reihe von globalen Template-Funktionen in <QtAlgorithms>
, die auf Containern arbeiten und kleine Aufgaben ausführen, um das Leben zu erleichtern, wie z.B. qDeleteAll(), das operator delete
auf allen Elementen in einem bestimmten Container oder in einem bestimmten Bereich aufruft. Sie können diese Algorithmen mit jeder Containerklasse verwenden, die STL-ähnliche Iteratoren bereitstellt, einschließlich der Qt-Klassen QList, QMap und QHash.
Die meisten Algorithmen nehmen STL-artige Iteratoren als Parameter. Die Algorithmen sind generisch in dem Sinne, dass sie nicht an eine bestimmte Iterator-Klasse gebunden sind; Sie können sie mit allen Iteratoren verwenden, die bestimmte Anforderungen erfüllen.
Verschiedene Algorithmen können unterschiedliche Anforderungen an die Iteratoren haben, die sie akzeptieren. Die erforderlichen Iteratortypen werden für jeden Algorithmus angegeben. Wenn ein Iterator des falschen Typs übergeben wird (z. B. wenn QList::ConstIterator als output iterator übergeben wird), erhalten Sie immer einen Compilerfehler, wenn auch nicht unbedingt einen sehr informativen.
Einige Algorithmen stellen besondere Anforderungen an den in den Containern gespeicherten Wertetyp. So verlangt beispielsweise qDeleteAll(), dass der Werttyp ein Nicht-Konstanten-Zeigertyp ist (z. B. QWidget *). Die Anforderungen an den Wertetyp werden für jeden Algorithmus angegeben, und der Compiler gibt einen Fehler aus, wenn eine Anforderung nicht erfüllt ist.
Die generischen Algorithmen können auf anderen Containerklassen als denen von Qt und STL verwendet werden. Die Syntax von Iteratoren im STL-Stil ist nach C++-Zeigern modelliert, so dass es möglich ist, einfache Arrays als Container und einfache Zeiger als Iteratoren zu verwenden.
Typen von Iteratoren
Die Algorithmen haben bestimmte Anforderungen an die Iterator-Typen, die sie akzeptieren, und diese werden für jede Funktion einzeln angegeben. Der Compiler gibt einen Fehler aus, wenn eine Anforderung nicht erfüllt ist.
Eingabe-Iteratoren
Ein Eingabe-Iterator ist ein Iterator, der zum sequentiellen Lesen von Daten aus einem Container verwendet werden kann. Er muss die folgenden Operatoren bereitstellen: ==
und !=
für den Vergleich zweier Iteratoren, unary *
für das Abrufen des im Element gespeicherten Wertes und prefix ++
für das Vorrücken zum nächsten Element.
Die Iterator-Typen der Qt-Container (const und non-const) sind alle Eingabe-Iteratoren.
Ausgabe-Iteratoren
Ein Ausgabe-Iterator ist ein Iterator, der verwendet werden kann, um Daten sequentiell in einen Container oder in einen Ausgabestrom zu schreiben. Er muss die folgenden Operatoren bereitstellen: unary *
für das Schreiben eines Wertes (d.h. *it = val
) und prefix ++
für das Vorrücken zum nächsten Element.
Die nicht-konstanten Iterator-Typen der Qt-Container sind alle Ausgabe-Iteratoren.
Vorwärts-Iteratoren
Ein Forward-Iterator ist ein Iterator, der sowohl die Anforderungen von Input-Iteratoren als auch von Output-Iteratoren erfüllt.
Die nicht-konstanten Iterator-Typen der Qt-Container sind alle Vorwärts-Iteratoren.
Bidirektionale Iteratoren
Ein bidirektionaler Iterator ist ein Iterator, der die Anforderungen von Vorwärts-Iteratoren erfüllt, aber zusätzlich das Präfix --
für die Rückwärts-Iteration unterstützt.
Die nicht-konstanten Iterator-Typen der Qt-Container sind alle bidirektionale Iteratoren.
Iteratoren mit wahlfreiem Zugriff
Die letzte Kategorie, Iteratoren mit wahlfreiem Zugriff, ist der mächtigste Iterator-Typ. Er unterstützt alle Anforderungen eines bidirektionalen Iterators und unterstützt die folgenden Operationen:
i += n | schiebt den Iterator i um n Positionen vor |
i -= n | verschiebt den Iterator i um n Positionen zurück |
i + n oder n + i | gibt den Iterator für das Element n Positionen vor dem Iterator zurück i |
i - n | gibt den Iterator für das Element n Positionen hinter dem Iterator zurück i |
i - j | gibt die Anzahl der Elemente zwischen den Iteratoren i und j |
i[n] | gleich wie *(i + n) |
i < j | gibt true zurück, wenn der Iterator j nach dem Iterator kommt i |
QListDer Nicht-Konst-Iterator-Typ von iterator ist ein Iterator mit wahlfreiem Zugriff.
Siehe auch Container-Klassen und <QtGlobal>.
Funktion Dokumentation
[constexpr noexcept]
uint qCountLeadingZeroBits(quint16 v)
Gibt die Anzahl der aufeinanderfolgenden Nullbits in v zurück, wenn ab dem MSB gesucht wird. Zum Beispiel gibt qCountLeadingZeroBits(quint16(1)) 15 und qCountLeadingZeroBits(quint16(8)) 12 zurück.
[constexpr noexcept]
uint qCountLeadingZeroBits(quint32 v)
Gibt die Anzahl der aufeinanderfolgenden Nullbits in v zurück, wenn ab dem MSB gesucht wird. Zum Beispiel gibt qCountLeadingZeroBits(quint32(1)) 31 und qCountLeadingZeroBits(quint32(8)) 28 zurück.
[constexpr noexcept]
uint qCountLeadingZeroBits(quint64 v)
Gibt die Anzahl der aufeinanderfolgenden Nullbits in v zurück, wenn ab dem MSB gesucht wird. Zum Beispiel gibt qCountLeadingZeroBits(quint64(1)) 63 und qCountLeadingZeroBits(quint64(8)) 60 zurück.
[constexpr noexcept]
uint qCountLeadingZeroBits(quint8 v)
Gibt die Anzahl der aufeinanderfolgenden Nullbits in v zurück, wenn vom MSB aus gesucht wird. Zum Beispiel gibt qCountLeadingZeroBits(quint8(1)) 7 und qCountLeadingZeroBits(quint8(8)) 4 zurück.
[constexpr noexcept]
uint qCountTrailingZeroBits(quint8 v)
Gibt die Anzahl der aufeinanderfolgenden Nullbits in v zurück, wenn ab dem LSB gesucht wird. Beispiel: qCountTrailingZeroBits(1) gibt 0 und qCountTrailingZeroBits(8) gibt 3 zurück.
[constexpr noexcept]
uint qCountTrailingZeroBits(quint16 v)
Dies ist eine überladene Funktion.
[constexpr noexcept]
uint qCountTrailingZeroBits(quint32 v)
Dies ist eine überladene Funktion.
[constexpr noexcept]
uint qCountTrailingZeroBits(quint64 v)
Dies ist eine überladene Funktion.
template <typename ForwardIterator> void qDeleteAll(ForwardIterator begin, ForwardIterator end)
Löscht alle Elemente im Bereich [begin, end) unter Verwendung des C++-Operators delete
. Der Elementtyp muss ein Zeigertyp sein (z. B. QWidget *
).
Beispiel:
QList<Employee *> list; list.append(new Employee("Blackpool", "Stephen")); list.append(new Employee("Twist", "Oliver")); qDeleteAll(list.begin(), list.end()); list.clear();
Beachten Sie, dass qDeleteAll() die Elemente nicht aus dem Container entfernt; es ruft lediglich delete
auf. Im obigen Beispiel rufen wir clear() für den Container auf, um die Elemente zu entfernen.
Diese Funktion kann auch verwendet werden, um Objekte zu löschen, die in assoziativen Containern gespeichert sind, wie QMap und QHash. Nur die in den einzelnen Containern gespeicherten Objekte werden durch diese Funktion gelöscht; Objekte, die als Schlüssel verwendet werden, werden nicht gelöscht.
Siehe auch forward iterators.
template <typename Container> void qDeleteAll(const Container &c)
Dies ist eine überladene Funktion.
Dies ist dasselbe wie qDeleteAll(c.begin(), c.end()).
[constexpr noexcept]
uint qPopulationCount(quint8 v)
Gibt die Anzahl der in v gesetzten Bits zurück. Diese Zahl wird auch als das Hamming-Gewicht von v bezeichnet.
[constexpr noexcept]
uint qPopulationCount(quint16 v)
Dies ist eine überladene Funktion.
[constexpr noexcept]
uint qPopulationCount(quint32 v)
Dies ist eine überladene Funktion.
[constexpr noexcept]
uint qPopulationCount(quint64 v)
Dies ist eine überladene Funktion.
© 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.