En esta página

QSet::iterator Class

class QSet::iterator

La clase QSet::iterator proporciona un iterador no-const de estilo STL para QSet. Más...

Tipos públicos

Funciones públicas

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

Descripción detallada

QSet incluye tanto iteradores de estilo STL como iteradores de estilo Java. Los iteradores de estilo STL son más de bajo nivel y más engorrosos de usar; por otro lado, son ligeramente más rápidos y, para los desarrolladores que ya conocen STL, tienen la ventaja de la familiaridad.

QSet<T>::iterator te permite iterar sobre QSet y eliminar elementos (usando QSet::erase()) mientras iteras. (QSet no te permite modificar un valor a través de un iterador, porque eso requeriría potencialmente mover el valor en la tabla hash interna utilizada por QSet). Si quieres iterar sobre una const QSet, deberías usar QSet::const_iterator. Generalmente es una buena práctica usar QSet::const_iterator sobre un QSet no-const también, a menos que necesite cambiar el QSet a través del iterador. Los iteradores const son ligeramente más rápidos y pueden mejorar la legibilidad del código.

El constructor por defecto QSet::iterator crea un iterador no inicializado. Debes inicializarlo usando una función como QSet::begin(), QSet::end(), o QSet::insert() antes de que puedas empezar a iterar. A continuación se muestra un bucle típico que imprime todos los elementos almacenados en un conjunto:

QSet<QString> set = {"Enero", "Febrero", /*...*/ "Diciembre"};// i es un QSet<QString>::iteratorfor(auto i = set.begin(), end = set.end(); i != end; ++i)    qDebug() << *i;

He aquí un bucle que elimina ciertos elementos (todos los que empiezan por 'J') de un conjunto mientras itera:

QSet<QString> set = {"January", "February", /*...*/ "December"};

auto i = set.begin();
while (i != set.end()) {
    if ((*i).startsWith('J')) {
        i = set.erase(i);
    } else {
        ++i;
    }
}

Los iteradores de estilo STL pueden utilizarse como argumentos de generic algorithms. Por ejemplo, aquí se muestra cómo encontrar un elemento en el conjunto utilizando el algoritmo qFind():

QSet<QString> set;
//...
const auto predicate = [](const QString &s) { return s.compare("Jeanette", Qt::CaseInsensitive) == 0; };
QSet<QString>::iterator it = std::find_if(set.begin(), set.end(), predicate);
if (it != set.end())
    cout << "Found Jeanette" << endl;

Se pueden utilizar múltiples iteradores en el mismo conjunto.

Advertencia: Los iteradores sobre contenedores implícitamente compartidos no funcionan exactamente como los iteradores STL. Deberías evitar copiar un contenedor mientras los iteradores están activos en ese contenedor. Para más información, lea Problema de los iteradores compartidos implícitamente.

Véase también QSet::const_iterator y QMutableSetIterator.

Documentación de tipos de miembros

iterator::iterator_category

Sinónimos de std::bidirectional_iterator_tag que indican que estos iteradores son iteradores bidireccionales.

Documentación de funciones miembro

iterator::iterator()

Construye un iterador no inicializado.

Funciones como operator*() y operator++() no deben ser llamadas en un iterador no inicializado. Utilice operator=() para asignarle un valor antes de utilizarlo.

Véase también QSet::begin() y QSet::end().

iterator::iterator(const QSet<T>::iterator &other)

Construye una copia de other.

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

Devuelve true si other apunta a un elemento distinto de este iterador; en caso contrario devuelve false.

Véase también operator==().

const T &iterator::operator*() const

Devuelve una referencia al elemento actual.

Véase también operator->().

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

El operador prefijo ++ (++it) avanza el iterador al siguiente elemento del conjunto y devuelve un iterador al nuevo elemento actual.

Llamar a esta función en QSet<T>::constEnd() conduce a resultados indefinidos.

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

El operador postfijo ++ (it++) avanza el iterador al siguiente elemento del conjunto y devuelve un iterador al elemento previamente actual.

const T *iterator::operator->() const

Devuelve un puntero al elemento actual.

Véase también operator*().

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

Asigna other a este iterador.

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

Devuelve true si other apunta al mismo elemento que este iterador; en caso contrario devuelve false.

Véase también operator!=().

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

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

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