Qt
Qt Container Classes
Recherche…
Remarques
Qt fournit ses propres classes de conteneur de modèles. Ils sont tous implicitement partagés. Ils fournissent deux types d'itérateurs (style Java et style STL).
Les conteneurs séquentiels Qt incluent: QVector, QList, QLinkedList, QStack, QQueue.
Les conteneurs associatifs Qt incluent: QMap, QMultiMap, QHash, QMultiHash, QSet.
Utilisation de la pile
QStack<T>
est une pile fournissant une classe de modèle Qt. Son analogue en STL est std::stack
. C'est structure dernier entré, premier sorti (LIFO).
QStack<QString> stack;
stack.push("First");
stack.push("Second");
stack.push("Third");
while (!stack.isEmpty())
{
cout << stack.pop() << endl;
}
Il va sortir: troisième, deuxième, premier.
QStack
hérite de QVector
, son implémentation est donc très différente de celle de STL. En STL, std::stack
est implémenté en tant que wrapper pour taper pass pour un argument de template (deque par défaut). Les principales opérations restent les mêmes pour QStack
et pour std::stack
.
Utilisation de QVector
QVector<T>
fournit une classe de modèle de tableau dynamique. Il fournit de meilleures performances dans la plupart des cas que QList<T>
, il devrait donc être le premier choix.
Il peut être initialisé de différentes manières:
QVector<int> vect;
vect << 1 << 2 << 3;
QVector<int> v {1, 2, 3, 4};
La dernière concerne la liste d'initialisation.
QVector<QString> stringsVector;
stringsVector.append("First");
stringsVector.append("Second");
Vous pouvez obtenir le iième élément de vecteur de cette façon:
v[i]
ou at[i]
Assurez-vous que i
est une position valide, même at(i)
ne fait pas de vérification, c'est une différence par rapport à std::vector
.
Utilisation de QLinkedList
Dans Qt, vous devez utiliser QLinkedList si vous devez implémenter une liste chaînée .
Il est rapide d'ajouter, d'ajouter, d'insérer des éléments dans QLinkedList
-O (1), mais la recherche d'index est plus lente que dans QList
ou QVector
-O (n). C'est normal de prendre en compte que vous devez parcourir les nœuds pour trouver quelque chose dans la liste chaînée.
Le tableau complet de la complexité algorithmique peut être trouvé ici .
Juste pour insérer des éléments dans QLinkedList
vous pouvez utiliser operator <<()
:
QLinkedList<QString> list;
list << "string1" << "string2" << "string3";
Pour insérer des éléments au milieu de QLinkedList
ou modifier tout ou partie de ses éléments, vous pouvez utiliser des itérateurs de style Java ou de style STL. Voici un exemple simple de la façon dont nous multiplions tous les éléments de QLinkedList
par 2:
QLinkedList<int> integerList {1, 2, 3};
QLinkedList<int>::iterator it;
for (it = integerList.begin(); it != integerList.end(); ++it)
{
*it *= 2;
}
QList
La classe QList
est une classe de modèle qui fournit des listes. Il stocke les éléments dans une liste qui fournit un accès rapide par index et des insertions et des suppressions basées sur des index.
Pour insérer des éléments dans la liste, vous pouvez utiliser operator<<()
, insert()
, append()
ou prepend()
. Par exemple:
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");
Pour accéder à l'élément à une position d'index particulière, vous pouvez utiliser l' operator[]()
ou at()
. at()
peut être plus rapide que operator[]()
, ne provoque jamais de copie profonde du conteneur et doit fonctionner en temps constant. Aucun d'entre eux ne vérifie les arguments. Exemples:
if (list[0] == "mystring")
cout << "mystring found" << endl;
Ou
if (list.at(i) == "mystring")
cout << "mystring found at position " << i << endl;
Pour supprimer des éléments, il existe des fonctions telles que removeAt()
, takeAt()
, takeFirst()
, takeLast()
, removeFirst()
, removeLast()
ou removeOne()
. Exemples:
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");
Pour rechercher toutes les occurrences d'une valeur particulière dans une liste, vous pouvez utiliser indexOf()
ou lastIndexOf()
. Exemple:
indexOf()
int i = list.indexOf("mystring");
if (i != -1)
cout << "First occurrence of mystring is at position " << i << endl;