Sur cette page

QLinkedList::iterator Class

class QLinkedList::iterator

La classe QLinkedList::iterator fournit un itérateur non-const de style STL pour QLinkedList. Plus d'informations...

Fonctions publiques

iterator()
bool operator!=(const QLinkedList<T>::const_iterator &other) const
bool operator!=(const QLinkedList<T>::iterator &other) const
T &operator*() const
QLinkedList<T>::iterator operator+(int j) const
QLinkedList<T>::iterator &operator++()
QLinkedList<T>::iterator operator++(int)
QLinkedList<T>::iterator &operator+=(int j)
QLinkedList<T>::iterator operator-(int j) const
QLinkedList<T>::iterator &operator--()
QLinkedList<T>::iterator operator--(int)
QLinkedList<T>::iterator &operator-=(int j)
T *operator->() const
bool operator==(const QLinkedList<T>::const_iterator &other) const
bool operator==(const QLinkedList<T>::iterator &other) const

Description détaillée

QLinkedList comporte à la fois des itérateurs de style STL et des itérateurs de style Java. Les itérateurs de style STL sont plus bas niveau et plus lourds à utiliser ; d'un autre côté, ils sont légèrement plus rapides et, pour les développeurs qui connaissent déjà STL, ils ont l'avantage de la familiarité.

QLinkedList<T>::iterator> permet d'itérer sur QLinkedList<T> et de modifier l'élément de liste associé à l'itérateur. Si vous souhaitez itérer sur un const QLinkedList, utilisez plutôt QLinkedList::const_iterator. Il est généralement conseillé d'utiliser QLinkedList::const_iterator sur un QLinkedList non constant, à moins que vous n'ayez besoin de modifier le QLinkedList par l'intermédiaire de l'itérateur. Les itérateurs const sont légèrement plus rapides et peuvent améliorer la lisibilité du code.

Le constructeur par défaut de QLinkedList::iterator crée un itérateur non initialisé. Vous devez l'initialiser à l'aide d'une fonction telle que QLinkedList::begin(), QLinkedList::end() ou QLinkedList::insert() avant de pouvoir commencer l'itération. Voici une boucle typique qui imprime tous les éléments stockés dans une liste :

QLinkedList<QString> list;
list.append("January");
list.append("February");
...
list.append("December");

QLinkedList<QString>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
    cout << *i << Qt::endl;

Les itérateurs de style STL peuvent être utilisés comme arguments de generic algorithms. Par exemple, voici comment trouver un élément dans la liste :

QLinkedList<QString> list;
...
QLinkedList<QString>::iterator it = std::find(list.begin(),
                                              list.end(), "Joel");
if (it != list.end())
    cout << "Found Joel" << Qt::endl;

Voyons quelques exemples de choses que nous pouvons faire avec un QLinkedList::iterator et que nous ne pouvons pas faire avec un QLinkedList::const_iterator. Voici un exemple qui incrémente chaque valeur stockée dans un QLinkedList<int> par 2 :

QLinkedList<int>::iterator i;
for (i = list.begin(); i != list.end(); ++i)
    *i += 2;

Voici un exemple qui supprime tous les éléments commençant par un trait de soulignement dans un QLinkedList<QString> :

QLinkedList<QString> list;
...
QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
    if ((*i).startsWith('_'))
        i = list.erase(i);
    else
        ++i;
}

L'appel à QLinkedList::erase() supprime de la liste l'élément pointé par l'itérateur et renvoie un itérateur vers l'élément suivant. Voici une autre façon de supprimer un élément pendant l'itération :

QLinkedList<QString>::iterator i = list.begin();
while (i != list.end()) {
    QLinkedList<QString>::iterator previous = i;
    ++i;
    if ((*previous).startsWith('_'))
        list.erase(previous);
}

Il peut être tentant d'écrire un code comme celui-ci :

// WRONG
while (i != list.end()) {
    if ((*i).startsWith('_'))
        list.erase(i);
    ++i;
}

Cependant, ce code risque de planter à ++i, car i est un itérateur suspendu après l'appel à erase().

Plusieurs itérateurs peuvent être utilisés sur la même liste. Si vous ajoutez des éléments à la liste, les itérateurs existants resteront valides. Si vous supprimez des éléments de la liste, les itérateurs qui pointent vers les éléments supprimés deviendront des itérateurs pendants.

Attention : Les itérateurs sur des conteneurs implicitement partagés ne fonctionnent pas exactement comme les itérateurs STL. Vous devez éviter de copier un conteneur lorsque des itérateurs sont actifs sur ce conteneur. Pour plus d'informations, lisez le document Implicit sharing iterator problem.

Voir aussi QLinkedList::const_iterator et QMutableLinkedListIterator.

Documentation sur les fonctions membres

iterator::iterator()

Construit un itérateur non initialisé.

Les fonctions telles que operator*() et operator++() ne doivent pas être appelées sur un itérateur non initialisé. Utilisez operator=() pour lui attribuer une valeur avant de l'utiliser.

Voir aussi QLinkedList::begin() et QLinkedList::end().

bool iterator::operator!=(const QLinkedList<T>::iterator &other) const

bool iterator::operator!=(const QLinkedList<T>::const_iterator &other) const

Renvoie true si other pointe vers un élément différent de cet itérateur ; sinon, renvoie false.

Voir aussi operator==().

T &iterator::operator*() const

Renvoie une référence modifiable à l'élément courant.

Vous pouvez modifier la valeur d'un élément en utilisant l'opérateur*() du côté gauche d'une affectation, par exemple :

if (*it == "Hello")
    *it = "Bonjour";

Voir aussi operator->().

QLinkedList<T>::iterator iterator::operator+(int j) const

Renvoie un itérateur vers l'élément situé à j positions en avant de cet itérateur. (Si j est négatif, l'itérateur revient en arrière).

Cette opération peut être lente pour les grandes valeurs de j.

Voir également operator-().

QLinkedList<T>::iterator &iterator::operator++()

L'opérateur préfixe ++ (++it) fait passer l'itérateur à l'élément suivant de la liste et renvoie un itérateur au nouvel élément courant.

L'appel de cette fonction sur QLinkedList::end() conduit à des résultats indéfinis.

Voir aussi operator--().

QLinkedList<T>::iterator iterator::operator++(int)

L'opérateur postfixe ++ (it++) fait passer l'itérateur à l'élément suivant de la liste et renvoie un itérateur à l'élément courant précédent.

Il s'agit d'une fonction surchargée.

QLinkedList<T>::iterator &iterator::operator+=(int j)

Avance l'itérateur de j éléments. (Si j est négatif, l'itérateur recule).

Voir également operator-=() et operator+().

QLinkedList<T>::iterator iterator::operator-(int j) const

Renvoie un itérateur vers l'élément situé à j positions en arrière de cet itérateur. (Si j est négatif, l'itérateur avance).

Cette opération peut être lente pour les grandes valeurs de j.

Voir également operator+().

QLinkedList<T>::iterator &iterator::operator--()

L'opérateur préfixe - (--it) rend l'élément précédent actuel et renvoie un itérateur vers le nouvel élément actuel.

L'appel de cette fonction sur QLinkedList::begin() conduit à des résultats indéfinis.

Voir aussi operator++().

QLinkedList<T>::iterator iterator::operator--(int)

L'opérateur postfixe - (it--) rend l'élément précédent courant et renvoie un itérateur vers l'élément courant précédent.

Il s'agit d'une fonction surchargée.

QLinkedList<T>::iterator &iterator::operator-=(int j)

Fait reculer l'itérateur de j éléments. (Si j est négatif, l'itérateur avance).

Voir aussi operator+=() et operator-().

T *iterator::operator->() const

Renvoie un pointeur sur l'élément courant.

Voir aussi operator*().

bool iterator::operator==(const QLinkedList<T>::iterator &other) const

bool iterator::operator==(const QLinkedList<T>::const_iterator &other) const

Renvoie true si other pointe sur le même élément que cet itérateur ; sinon, renvoie false.

Voir aussi operator!=().

© 2026 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.