Qt stellt ähnlich wie die STL verschiedene Datenstrukturen als Klassen bereit. Die Container von Qt bieten aber noch mehr Funktionen an. Sie können auch jederzeit durch Aufruf der Methode toStd[Type]()
(z.B. toStdList()
, toStdVector()
) in STL-Container umgewandelt werden.
QStack, ausführlicher…
Werden im Container Zeiger gespeichert, so muss deren Speicher natürlich freigegeben werden. Das kann man mit einer einfachen Schleife erledigen:
while(container.size() > 0) delete container.takeLast();
Da dies aber sehr häufig vorkommt, ist dieser Algorithmus in qDeleteAll()
bereits implementiert. Oben genannten Code könnte man also auch so schreiben:
#include <QtAlgorithms> // ... qDeleteAll(container);
#include <QList> #include <iostream> using namespace std; int main () { QList<int> list; for (int i = 0; i < 100; i++) list.push_back (i); // Werte von 0-99 in die Liste einfügen cout << "Anzahl der Elemente: " << list.size () << endl; cout << "Element mit Index 5 und Wert " << list.takeAt (5) << " wird aus der Liste entfernt" << endl; // Element entfernen und zurückliefern cout << "Element mit Index 50: " << list[50] << endl; // Index-Operator cout << "Index von Element mit Wert 10: " << list.indexOf (10) << endl; // Index von Wert cout << "Entferne letztes Element" << endl; list.pop_back (); // letztes Element entfernen cout << "Neue Anzahl der Elemente: " << list.size () << endl; return 0; }
Ausgabe:
Anzahl der Elemente: 100 Element mit Index 5 und Wert 5 wird aus der Liste entfernt Element mit Index 50: 51 Index von Element mit Wert 10: 9 Neue Anzahl der Elemente: 98
#include <QVector> #include <iostream> using namespace std; int main () { QVector<int> v1, v2, v3; for (int i = 0; i < 50; i++) v1.push_back (i); // Werte von 0-49 in den Vektor einfügen for (int i = 50; i < 100; i++) v2.push_back (i); // Werte von 50-99 in den Vektor einfügen v1.insert (0, 101); // Wert 101 an Index 0 einfügen cout << "Anzahl Elemente v1: " << v1.size () << endl; cout << "Anzahl Elemente v2: " << v2.size () << endl; cout << "Verkettung der beiden Vektoren zu v3" << endl; v3 = v1 + v2; // Vektoren verketten cout << "Anzahl Elemente v3: " << v3.size () << endl; return 0; }
Ausgabe:
Anzahl Elemente v1: 51 Anzahl Elemente v2: 50 Verkettung der beiden Vektoren zu v3 Anzahl Elemente v3: 101
#include <QQueue> #include <iostream> using namespace std; int main () { QQueue<int> q; for (int i = 0; i < 5; i++) q.enqueue (i); // Werte 0-4 in die Queue einfügen while (q.size () != 0) cout << q.dequeue () << endl; // Alle Werte aus der Queue lesen return 0; }
Ausgabe:
0 1 2 3 4