Spec-Zone.ru › Qt 6.1

<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++, поэтому можно использовать обычные массивы в качестве контейнеров и обычные указатели в качестве итераторов.

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

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

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

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

Типы итераторов (const и non-const) контейнеров 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.

END_OF_DOCUMENT_MARKER

[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.1/qtalgorithms.html

Spec-Zone.ru

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