<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 += n | avanza el iterador i por n posiciones |
i -= n | retrocede el iterador i en n posiciones |
i + n o n + i | devuelve el iterador para el elemento n posiciones por delante del iterador i |
i - n | devuelve el iterador para el elemento n posiciones por detrás del iterador i |
i - j | devuelve el número de elementos entre los iteradores i y j |
i[n] | igual que *(i + n) |
i < j | devuelve 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.