Container

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.
FIXME QStack, ausführlicher…

Speicher aller Elemente freigeben

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);

Beispiele

QList

#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

QVector

#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

QQeue

#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