Spec-Zone.ru › Qt

<QtAlgorithms> - Универсальные алгоритмы

Заголовок <QtAlgorithms> содержит универсальные, основанные на шаблонах алгоритмы. Подробнее...

Заголовок: #include <QtAlgorithms>
  • Устаревшие члены

Функции

uint qCountLeadingZeroBits(quint8 v)
uint qCountLeadingZeroBits(quint16 v)
uint qCountLeadingZeroBits(quint32 v)
uint qCountLeadingZeroBits(quint64 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)
uint qPopulationCount(quint8 v)
uint qPopulationCount(quint16 v)
uint qPopulationCount(quint32 v)
uint qPopulationCount(quint64 v)

Подробное описание

Qt предоставляет ряд глобальных шаблонных функций в <QtAlgorithms>, которые работают с контейнерами и выполняют небольшие задачи, чтобы упростить работу, такие как qDeleteAll(), которая вызывает operator delete для всех элементов в заданном контейнере или в заданном диапазоне. Вы можете использовать эти алгоритмы с любым классом контейнера, который предоставляет итераторы в стиле STL, включая Qt QList, QMap и QHash.

Большинство алгоритмов принимают итераторы в стиле STL в качестве параметров. Алгоритмы являются универсальными в том смысле, что они не привязаны к конкретному классу итераторов; вы можете использовать их с любыми итераторами, которые соответствуют определенному набору требований.

Разные алгоритмы могут иметь разные требования к принимаемым ими итераторам. Типы итераторов, необходимые для каждого алгоритма, указаны для каждого алгоритма. Если передается итератор неправильного типа (например, QList::ConstIterator передаётся как итератор вывода), вы всегда получите ошибку компилятора, хотя и не обязательно очень информативную.

Некоторые алгоритмы имеют особые требования к типу значения, хранимому в контейнерах. Например, qDeleteAll() требует, чтобы тип значения был типом указателя, не являющимся константным (например, QWidget *). Требования к типу значения указаны для каждого алгоритма, и компилятор выдаст ошибку, если требование не выполняется.

Универсальные алгоритмы могут использоваться с другими классами контейнеров, отличными от предоставляемых Qt и STL. Синтаксис итераторов в стиле STL смоделирован по образцу указателей C++, поэтому можно использовать обычные массивы в качестве контейнеров и обычные указатели в качестве итераторов.

Типы итераторов

Алгоритмы имеют определенные требования к типам итераторов, которые они принимают, и эти требования указаны индивидуально для каждой функции. Компилятор выдаст ошибку, если требование не выполняется.

Итераторы ввода

Итератор ввода — это итератор, который может использоваться для последовательного чтения данных из контейнера. Он должен предоставлять следующие операторы: == и != для сравнения двух итераторов, унарный * для получения значения, хранящегося в элементе, и префиксный ++ для перехода к следующему элементу.

Типы итераторов контейнеров Qt (постоянные и непостоянные) — все итераторы ввода.

Итераторы вывода

Итератор вывода — это итератор, который может использоваться для последовательной записи данных в контейнер или в какой-либо выходной поток. Он должен предоставлять следующие операторы: унарный * для записи значения (т.е., *it = val) и префиксный ++ для перехода к следующему элементу.

Типы непостоянных итераторов контейнеров Qt — все итераторы вывода.

Итераторы вперёд

Итератор вперёд — это итератор, который удовлетворяет требованиям как итераторов ввода, так и итераторов вывода.

Типы непостоянных итераторов контейнеров Qt — все итераторы вперёд.

Двунаправленные итераторы

Двунаправленный итератор — это итератор, который удовлетворяет требованиям итераторов вперёд, но который, помимо этого, поддерживает префиксный -- для обратного перехода.

Типы непостоянных итераторов контейнеров Qt — все двунаправленные итераторы.

Итераторы произвольного доступа

Последняя категория, итераторы произвольного доступа, является наиболее мощным типом итератора. Он поддерживает все требования двунаправленного итератора и поддерживает следующие операции:

i += n перемещает итератор i на n позиций вперёд
i -= n перемещает итератор i на n позиций назад
i + n или n + i возвращает итератор для элемента, расположенного на n позиций вперёд от итератора i
i - n возвращает итератор для элемента, расположенного на n позиций назад от итератора i
i - j возвращает количество элементов между итераторами i и j
i[n] то же, что и *(i + n)
i < j возвращает true, если итератор j следует за итератором i

QList's непостоянный тип итератора — итератор произвольного доступа.

См. также классы контейнеров и <QtGlobal>.

Документация по функциям

[since 5.6] uint qCountLeadingZeroBits(quint8 v)

Возвращает количество последовательных нулевых битов в v, при поиске с старшего бита. Например, qCountLeadingZeroBits(quint8(1)) возвращает 7, а qCountLeadingZeroBits(quint8(8)) возвращает 4.

Функция была добавлена в Qt 5.6.

[since 5.6] uint qCountLeadingZeroBits(quint16 v)

Возвращает количество последовательных нулевых битов в v, при поиске с старшего бита. Например, qCountLeadingZeroBits(quint16(1)) возвращает 15, а qCountLeadingZeroBits(quint16(8)) возвращает 12.

Функция была добавлена в Qt 5.6.

[since 5.6] uint qCountLeadingZeroBits(quint32 v)

Возвращает количество последовательных нулевых битов в v, при поиске с старшего бита. Например, qCountLeadingZeroBits(quint32(1)) возвращает 31, а qCountLeadingZeroBits(quint32(8)) возвращает 28.

Функция была добавлена в Qt 5.6.

[since 5.6] uint qCountLeadingZeroBits(quint64 v)

Возвращает количество последовательных нулевых битов в v, при поиске с старшего бита. Например, qCountLeadingZeroBits(quint64(1)) возвращает 63, а qCountLeadingZeroBits(quint64(8)) возвращает 60.

Функция была добавлена в Qt 5.6.

[since 5.6] uint qCountTrailingZeroBits(quint8 v)

Возвращает количество последовательных нулевых битов в v, при поиске с младшего бита. Например, qCountTrailingZeroBits(1) возвращает 0, а qCountTrailingZeroBits(8) возвращает 3.

Функция была добавлена в Qt 5.6.

[since 5.6] uint qCountTrailingZeroBits(quint16 v)

Это перегруженная функция.

Функция была добавлена в Qt 5.6.

[since 5.6] uint qCountTrailingZeroBits(quint32 v)

Это перегруженный функцией.

Эта функция была представлена в Qt 5.6.

[since 5.6] uint qCountTrailingZeroBits(quint64 v)

Это перегруженный функцией.

Эта функция была представлена в Qt 5.6.

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

Удаляет все элементы в диапазоне [begin, end) с использованием оператора C++ delete. Тип элементов должен быть указателем (например, QWidget *).

Пример:

QList<Employee *> list;
list.append(new Employee("Blackpool", "Stephen"));
list.append(new Employee("Twist", "Oliver"));

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

Обратите внимание, что qDeleteAll() не удаляет элементы из контейнера; она просто вызывает delete для них. В примере выше мы вызываем clear() для контейнера, чтобы удалить элементы.

Эта функция также может использоваться для удаления элементов, хранящихся в ассоциативных контейнерах, таких как QMap и QHash. Только объекты, хранящиеся в каждом контейнере, будут удалены этой функцией; объекты, используемые в качестве ключей, не будут удалены.

См. также итераторы вперед.

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

Это перегруженный функцией.

Это то же самое, что и qDeleteAll(c.begin(), c.end()).

[since 5.2] uint qPopulationCount(quint8 v)

Возвращает количество установленных битов в v. Это число также называется весом Хэмминга v.

Эта функция была представлена в Qt 5.2.

[since 5.2] uint qPopulationCount(quint16 v)

Это перегруженный функцией.

Эта функция была представлена в Qt 5.2.

[since 5.2] uint qPopulationCount(quint32 v)

Это перегруженный функцией.

Эта функция была представлена в Qt 5.2.

[since 5.2] uint qPopulationCount(quint64 v)

Это перегруженный функцией.

Эта функция была представлена в Qt 5.2.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtalgorithms.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API