Suche…


Bemerkungen

Qt stellt eigene Vorlagencontainerklassen zur Verfügung. Sie werden alle implizit geteilt. Sie bieten zwei Arten von Iteratoren (Java-Stil und STL-Stil).

Zu den sequentiellen Qt-Containern gehören: QVector, QList, QLinkedList, QStack, QQueue.

Zu den assoziativen Qt-Containern gehören: QMap, QMultiMap, QHash, QMultiHash, QSet.

QStack-Nutzung

QStack<T> ist eine Vorlagen-Qt-Klasse, die Stack bereitstellt. Sein Analogon in STL ist std::stack . Es handelt sich um die Last-in-First-out-Struktur (LIFO).

QStack<QString> stack;
stack.push("First");
stack.push("Second");
stack.push("Third");
while (!stack.isEmpty())
{
    cout << stack.pop() << endl;
}

Es wird ausgegeben: Third, Second, First.

QStack erbt von QVector daher unterscheidet sich die Implementierung von STL. In STL ist std::stack als Wrapper implementiert, dessen Typ als Vorlagenargument übergeben wird (standardmäßig deque). Die Hauptoperationen sind jedoch für QStack und für std::stack .

QVector-Nutzung

QVector<T> stellt eine dynamische QVector<T> bereit. Es bietet in den meisten Fällen eine bessere Leistung als QList<T> und sollte daher die erste Wahl sein.

Es kann auf verschiedene Arten initialisiert werden:

QVector<int> vect;
vect << 1 << 2 << 3;

QVector<int> v {1, 2, 3, 4};

Die neueste beinhaltet eine Initialisierungsliste.

QVector<QString> stringsVector;
stringsVector.append("First");
stringsVector.append("Second");

Sie können das i-te Element von vector folgendermaßen erhalten:

v[i] oder at[i]

Stellen Sie sicher, dass i eine gültige Position ist, selbst wenn at(i) keine Überprüfung durchführt. Dies ist ein Unterschied zu std::vector .

Verwendung der QLinkedList

In Qt sollten Sie QLinkedList verwenden, falls Sie eine verkettete Liste implementieren müssen.

Es ist schnell, Elemente in QLinkedList O (1) QLinkedList , vorauszusetzen und einzufügen, aber die QList ist langsamer als in QList oder QVector O (n). Dies ist normal, wenn Sie darauf achten, dass Sie Knoten durchlaufen müssen, um etwas in der verknüpften Liste zu finden.

Eine vollständige algorithmische Kompatibilitätstabelle finden Sie hier .

QLinkedList einige Elemente in QLinkedList , können Sie den Operator <<() :

QLinkedList<QString> list;
list << "string1" << "string2" << "string3";

Um Elemente in die Mitte von QLinkedList oder alle oder einige ihrer Elemente zu ändern, können Sie Java-Stil- oder STL-Stil-Iteratoren verwenden. Hier ein einfaches Beispiel, wie wir alle Elemente von QLinkedList mit 2 multiplizieren:

QLinkedList<int> integerList {1, 2, 3};
QLinkedList<int>::iterator it;
for (it = integerList.begin(); it != integerList.end(); ++it)
{
    *it *= 2;
}

QList

Die QList Klasse ist eine Vorlagenklasse, die Listen bereitstellt. Es speichert Elemente in einer Liste, die schnellen indexbasierten Zugriff sowie indexbasierte Einfügungen und Entfernungen ermöglicht.

Um Elemente in die Liste einzufügen, können Sie den operator<<() , insert() , append() oder prepend() . Zum Beispiel:

operator<<()

QList<QString> list;
list << "one" << "two" << "three";

insert()

QList<QString> list;
list << "alpha" << "beta" << "delta";
list.insert(2, "gamma");

append()

QList<QString> list;
list.append("one");
list.append("two");
list.append("three");

prepend()

QList<QString> list;
list.prepend("one");
list.prepend("two");
list.prepend("three");

Um auf das Element an einer bestimmten Indexposition zuzugreifen, können Sie den operator[]() oder at() . at() möglicherweise schneller als operator[]() , verursacht keine tiefe Kopie des Containers und sollte in einer konstanten Zeit arbeiten. Keiner von ihnen prüft das Argument. Beispiele:

if (list[0] == "mystring")
    cout << "mystring found" << endl;

Oder

if (list.at(i) == "mystring")
    cout << "mystring found at position " << i << endl;

Um Elemente zu entfernen, gibt es Funktionen wie removeAt() , takeAt() , takeFirst() , takeLast() , removeFirst() , removeLast() oder removeOne() . Beispiele:

takeFirst()

// takeFirst() removes the first item in the list and returns it
QList<QWidget *> list;
...
while (!list.isEmpty())
    delete list.takeFirst();

removeOne()

// removeOne() removes the first occurrence of value in the list
QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
list.removeOne("sun");

Um alle Vorkommen eines bestimmten Werts in einer Liste zu finden, können Sie indexOf() oder lastIndexOf() . Beispiel:

indexOf()

int i = list.indexOf("mystring");
if (i != -1)
    cout << "First occurrence of mystring is at position " << i << endl;


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow