En esta página

<QtAlgorithms> - Generic Algorithms

La cabecera <QtAlgorithms> incluye los algoritmos genéricos basados en plantillas. Más...

Header: #include <QtAlgorithms>

Funciones

uint qCountLeadingZeroBits(quint16 v)
uint qCountLeadingZeroBits(quint32 v)
uint qCountLeadingZeroBits(quint64 v)
uint qCountLeadingZeroBits(quint8 v)
uint qCountTrailingZeroBits(quint8 v)
uint qCountTrailingZeroBits(quint16 v)
uint qCountTrailingZeroBits(quint32 v)
uint qCountTrailingZeroBits(quint64 v)
void qDeleteAll(ForwardIterator begin, ForwardIterator end)
void qDeleteAll(const Container &c)
(since 6.10) Result qJoin(InputIterator first, InputIterator last, Result init, const Separator &separator = {}, Projection p = {})
uint qPopulationCount(quint8 v)
uint qPopulationCount(quint16 v)
uint qPopulationCount(quint32 v)
uint qPopulationCount(quint64 v)

Descripción detallada

Qt proporciona una serie de funciones de plantilla globales en <QtAlgorithms> que trabajan sobre contenedores y realizan pequeñas tareas para hacer la vida más fácil, como qDeleteAll(), que invoca operator delete en todos los elementos de un contenedor dado o en un rango dado. Puede utilizar estos algoritmos con cualquier clase contenedora que proporcione iteradores de estilo STL, incluidas las clases QList, QMap y QHash de Qt.

La mayoría de los algoritmos toman iteradores de estilo STL como parámetros. Los algoritmos son genéricos en el sentido de que no están vinculados a una clase iteradora específica; puedes utilizarlos con cualquier iterador que cumpla una serie de requisitos.

Diferentes algoritmos pueden tener diferentes requisitos para los iteradores que aceptan. Los tipos de iteradores requeridos se especifican para cada algoritmo. Si se pasa un iterador del tipo incorrecto (por ejemplo, si se pasa QList::ConstIterator como output iterator), siempre se obtendrá un error del compilador, aunque no necesariamente muy informativo.

Algunos algoritmos tienen requisitos especiales sobre el tipo de valor almacenado en los contenedores. Por ejemplo, qDeleteAll() requiere que el tipo de valor sea un tipo de puntero no-const (por ejemplo, QWidget *). Los requisitos de tipo de valor se especifican para cada algoritmo, y el compilador producirá un error si no se cumple un requisito.

Los algoritmos genéricos pueden utilizarse en otras clases contenedoras distintas de las proporcionadas por Qt y STL. La sintaxis de los iteradores estilo STL está modelada a partir de los punteros de C++, por lo que es posible utilizar arrays planos como contenedores y punteros planos como iteradores.

Tipos de iteradores

Los algoritmos tienen ciertos requisitos sobre los tipos de iteradores que aceptan, y éstos se especifican individualmente para cada función. El compilador producirá un error si no se cumple algún requisito.

Iteradores de entrada

Un iterador de entrada es un iterador que puede utilizarse para leer datos secuencialmente de un contenedor. Debe proporcionar los siguientes operadores: == y != para comparar dos iteradores, unario * para recuperar el valor almacenado en el elemento, y prefijo ++ para avanzar al siguiente elemento.

Los tipos de iteradores de los contenedores Qt (const y non-const) son todos iteradores de entrada.

Iteradores de salida

Un iterador de salida es un iterador que puede utilizarse para escribir datos secuencialmente en un contenedor o en algún flujo de salida. Debe proporcionar los siguientes operadores: unario * para escribir un valor (es decir, *it = val) y prefijo ++ para avanzar al siguiente elemento.

Los tipos de iteradores no-const de los contenedores Qt son todos iteradores de salida.

Iteradores de avance

Un iterador de avance es un iterador que cumple los requisitos tanto de los iteradores de entrada como de los iteradores de salida.

Los tipos de iteradores no-const de los contenedores Qt son todos iteradores de entrada.

Iteradores bidireccionales

Un iterador bidireccional es un iterador que cumple los requisitos de los iteradores hacia delante pero que además soporta el prefijo -- para iterar hacia atrás.

Los tipos de iteradores no-const de los contenedores Qt son todos iteradores bidireccionales.

Iteradores de acceso aleatorio

La última categoría, iteradores de acceso aleatorio, es el tipo de iterador más potente. Soporta todos los requisitos de un iterador bidireccional, y soporta las siguientes operaciones:

i += navanza el iterador i por n posiciones
i -= nretrocede el iterador i en n posiciones
i + n o n + idevuelve el iterador para el elemento n posiciones por delante del iterador i
i - ndevuelve el iterador para el elemento n posiciones por detrás del iterador i
i - jdevuelve el número de elementos entre los iteradores i y j
i[n]igual que *(i + n)
i < jdevuelve true si el iterador j es posterior al iterador i

QListes un iterador de acceso aleatorio.

Ver también clases contenedoras y <QtGlobal>.

Documentación de la función

[constexpr noexcept] uint qCountLeadingZeroBits(quint16 v)

Devuelve el número de bits cero consecutivos en v, cuando se busca desde el MSB. Por ejemplo, qCountLeadingZeroBits(quint16(1)) devuelve 15 y qCountLeadingZeroBits(quint16(8)) devuelve 12.

[constexpr noexcept] uint qCountLeadingZeroBits(quint32 v)

Devuelve el número de bits cero consecutivos en v, cuando se busca desde el MSB. Por ejemplo, qCountLeadingZeroBits(quint32(1)) devuelve 31 y qCountLeadingZeroBits(quint32(8)) devuelve 28.

[constexpr noexcept] uint qCountLeadingZeroBits(quint64 v)

Devuelve el número de bits cero consecutivos en v, cuando se busca desde el MSB. Por ejemplo, qCountLeadingZeroBits(quint64(1)) devuelve 63 y qCountLeadingZeroBits(quint64(8)) devuelve 60.

[constexpr noexcept] uint qCountLeadingZeroBits(quint8 v)

Devuelve el número de bits cero consecutivos en v, cuando se busca desde el MSB. Por ejemplo, qCountLeadingZeroBits(quint8(1)) devuelve 7 y qCountLeadingZeroBits(quint8(8)) devuelve 4.

[constexpr noexcept] uint qCountTrailingZeroBits(quint8 v)

Devuelve el número de bits cero consecutivos en v, cuando se busca desde el LSB. Por ejemplo, qCountTrailingZeroBits(1) devuelve 0 y qCountTrailingZeroBits(8) devuelve 3.

[constexpr noexcept] uint qCountTrailingZeroBits(quint16 v)

Se trata de una función sobrecargada.

[constexpr noexcept] uint qCountTrailingZeroBits(quint32 v)

Se trata de una función sobrecargada.

[constexpr noexcept] uint qCountTrailingZeroBits(quint64 v)

Se trata de una función sobrecargada.

template <typename ForwardIterator> void qDeleteAll(ForwardIterator begin, ForwardIterator end)

Elimina todos los elementos del rango [begin, end) utilizando el operador delete de C++. El tipo de elemento debe ser un tipo puntero (por ejemplo, QWidget *).

Ejemplo:

QList<QColor *> list;
list.append(new QColor(Qt::blue));
list.append(new QColor(Qt::yellow));

qDeleteAll(list.begin(), list.end());
list.clear();

Observe que qDeleteAll() no elimina los elementos del contenedor; simplemente llama a delete sobre ellos. En el ejemplo anterior, llamamos a clear() en el contenedor para eliminar los elementos.

Esta función también puede utilizarse para eliminar elementos almacenados en contenedores asociativos, como QMap y QHash. Sólo los objetos almacenados en cada contenedor serán eliminados por esta función; los objetos utilizados como claves no serán eliminados.

Véase también forward iterators.

template <typename Container> void qDeleteAll(const Container &c)

Es lo mismo que qDeleteAll(c.begin(), c.end()).

Se trata de una función sobrecargada.

[since 6.10] template < typename InputIterator, typename Result, typename Separator = Result, typename Projection = std::identity > Result qJoin(InputIterator first, InputIterator last, Result init, const Separator &separator = {}, Projection p = {})

Comienza con el valor inicial init y le añade acumulativamente cada entrada en el rango de first a last. Cada entrada es, antes de añadirse, mapeada a través de la proyección p (que por defecto es la identidad). Entre cada entrada y la siguiente, se añade un separator opcional. Por ejemplo:

QList<int> l = {1, 2, 3};
QString res = qJoin(l.cbegin(), l.cend(), QString(), u" / ",
                    [](int n) { return QString::number(2 * n);});
// res == "2 / 4 / 6"

Nota: q20::identity es un backport de C++20 a C++17. std::identity.

Esta función se introdujo en Qt 6.10.

[constexpr noexcept] uint qPopulationCount(quint8 v)

Devuelve el número de bits establecidos en v. Este número también se denomina peso Hamming de v.

[constexpr noexcept] uint qPopulationCount(quint16 v)

Se trata de una función sobrecargada.

[constexpr noexcept] uint qPopulationCount(quint32 v)

Se trata de una función sobrecargada.

[constexpr noexcept] uint qPopulationCount(quint64 v)

Se trata de una función sobrecargada.

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