Класс QBitArray
Класс QBitArray предоставляет массив битов. Подробнее...
| Заголовок: | #include <QBitArray> |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| QBitArray(QBitArray &&other) | |
| QBitArray(const QBitArray &other) | |
| QBitArray(int size, bool value = false) | |
| QBitArray() | |
| QBitArray & | operator=(QBitArray &&other) |
| QBitArray & | operator=(const QBitArray &other) |
| bool | at(int i) const |
| const char * | bits() const |
| void | clear() |
| void | clearBit(int i) |
| int | count() const |
| int | count(bool on) const |
| bool | fill(bool value, int size = -1) |
| void | fill(bool value, int begin, int end) |
| bool | isEmpty() const |
| bool | isNull() const |
| void | resize(int size) |
| void | setBit(int i) |
| void | setBit(int i, bool value) |
| int | size() const |
| void | swap(QBitArray &other) |
| bool | testBit(int i) const |
| bool | toggleBit(int i) |
| void | truncate(int pos) |
| bool | operator!=(const QBitArray &other) const |
| QBitArray & | operator&=(const QBitArray &other) |
| bool | operator==(const QBitArray &other) const |
| QBitRef | operator[](int i) |
| bool | operator[](int i) const |
| QBitRef | operator[](uint i) |
| bool | operator[](uint i) const |
| QBitArray & | operator^=(const QBitArray &other) |
| QBitArray & | operator|=(const QBitArray &other) |
| QBitArray | operator~() const |
Статические открытые члены
| QBitArray | fromBits(const char *data, qsizetype size) |
Связанные внешние члены
| QBitArray | operator&(const QBitArray &a1, const QBitArray &a2) |
| QDataStream & | operator<<(QDataStream &out, const QBitArray &ba) |
| QDataStream & | operator>>(QDataStream &in, QBitArray &ba) |
| QBitArray | operator^(const QBitArray &a1, const QBitArray &a2) |
| QBitArray | operator|(const QBitArray &a1, const QBitArray &a2) |
Подробное описание
QBitArray — это массив, который предоставляет доступ к отдельным битам и предоставляет операторы (&, |, ^, и ~), которые работают со всем массивом битов. Он использует неявное совместное использование (copy-on-write), чтобы уменьшить использование памяти и избежать ненужного копирования данных.
Следующий код создаёт QBitArray, содержащий 200 битов, инициализированных значением false (0):
QBitArray ba(200);
Для инициализации битов значением true, либо передайте true в качестве второго аргумента конструктору, либо вызовите fill() позже.
QBitArray использует индексы с нуля, как и массивы в C++. Для доступа к биту по определённому индексу, можно использовать оператор[](). Для не-константных массивов битов, оператор[]() возвращает ссылку на бит, которую можно использовать в левой части присваивания. Например:
QBitArray ba; ba.resize(3); ba[0] = true; ba[1] = false; ba[2] = true;
По техническим причинам, более эффективно использовать testBit() и setBit() для доступа к битам в массиве, чем оператор[]. Например:
QBitArray ba(3); ba.setBit(0, true); ba.setBit(1, false); ba.setBit(2, true);
QBitArray поддерживает & (&), | (|), ^ (^), ~ (~), а также &=, |=, и ^=. Эти операторы работают так же, как и встроенные побитовые операторы C++ с таким же именем. Например:
QBitArray x(5); x.setBit(3, true); // x: [ 0, 0, 0, 1, 0 ] QBitArray y(5); y.setBit(4, true); // y: [ 0, 0, 0, 0, 1 ] x |= y; // x: [ 0, 0, 0, 1, 1 ]
По историческим причинам, QBitArray различает нулевой массив битов и пустой массив битов. Нулевой массив битов — это массив битов, инициализированный с помощью конструктора по умолчанию QBitArray. Пустой массив битов — это любой массив битов с размером 0. Нулевой массив битов всегда пустой, но пустой массив битов не обязательно нулевой:
QBitArray().isNull(); // returns true QBitArray().isEmpty(); // returns true QBitArray(0).isNull(); // returns false QBitArray(0).isEmpty(); // returns true QBitArray(3).isNull(); // returns false QBitArray(3).isEmpty(); // returns false
Все функции, кроме isNull(), обрабатывают нулевые массивы битов так же, как и пустые массивы битов; например, QBitArray() сравнивается с QBitArray(0). Рекомендуется всегда использовать isEmpty() и избегать isNull().
См. также QByteArray и QVector.
Документация по членам-функциям
QBitArray::QBitArray(QBitArray &&other)
Конструктор перемещения для экземпляра QBitArray, делающий его указывающим на тот же объект, на который указывал other.
Эта функция была добавлена в Qt 5.2.
QBitArray::QBitArray(const QBitArray &other)
Создаёт копию other.
Эта операция занимает постоянное время, так как QBitArray неявно разделяется. Это делает возврат QBitArray из функции очень быстрым. Если изменён общий экземпляр, он будет скопирован (copy-on-write), и это займёт линейное время.
См. также operator=().
QBitArray::QBitArray(int size, bool value = false)
Создаёт массив битов размером size. Бит инициализируются значением value, по умолчанию false (0).
QBitArray::QBitArray()
Создаёт пустой массив битов.
См. также isEmpty().
QBitArray &QBitArray::operator=(QBitArray &&other)
Перемещает other в этот массив битов и возвращает ссылку на этот массив битов.
Эта функция была добавлена в Qt 5.2.
QBitArray &QBitArray::operator=(const QBitArray &other)
Присваивает other этому массиву битов и возвращает ссылку на этот массив битов.
bool QBitArray::at(int i) const
Возвращает значение бита по индексу i.
i должен быть корректным индексом в массиве битов (т.е., 0 <= i < size()).
См. также operator[]().
const char *QBitArray::bits() const
Возвращает указатель на плотный массив битов для этого QBitArray. Бит считаются сверху от младшего значащего бита в каждом байте. Количество значимых битов в последнем байте задаётся size() % 8.
Эта функция была добавлена в Qt 5.11.
См. также fromBits() и size().
void QBitArray::clear()
Очищает содержимое массива битов и делает его пустым.
См. также resize() и isEmpty().
void QBitArray::clearBit(int i)
Устанавливает бит по индексу i в 0.
i должен быть корректным индексом в массиве битов (т.е., 0 <= i < size()).
См. также setBit() и toggleBit().
int QBitArray::count() const
То же, что и size().
int QBitArray::count(bool on) const
Если on равно true, эта функция возвращает количество установленных битов (1) в массиве битов; иначе возвращает количество битов 0.
bool QBitArray::fill(bool value, int size = -1)
Устанавливает каждый бит в массиве битов в value, возвращая true при успехе; иначе возвращает false. Если size отличается от -1 (по умолчанию), массив битов предварительно изменяет свой размер на size.
Пример:
QBitArray ba(8); ba.fill(true); // ba: [ 1, 1, 1, 1, 1, 1, 1, 1 ] ba.fill(false, 2); // ba: [ 0, 0 ]
См. также resize().
void QBitArray::fill(bool value, int begin, int end)
Это перегруженная функция.
Устанавливает биты по индексам от begin до (но не включая) end в значение value.
begin должен быть корректным индексом в массиве битов (0 <= begin < size()).
end должен быть либо корректным индексом, либо равным size(), в этом случае операция заполнения выполняется до конца массива (0 <= end <= size()).
Пример:
QBitArray ba(4); ba.fill(true, 1, 2); // ba: [ 0, 1, 0, 0 ] ba.fill(true, 1, 3); // ba: [ 0, 1, 1, 0 ] ba.fill(true, 1, 4); // ba: [ 0, 1, 1, 1 ]
[static] QBitArray QBitArray::fromBits(const char *data, qsizetype size)
Создаёт QBitArray с плотным массивом битов, расположенным в data, размером size бит. Массив байтов в data должен быть по крайней мере size / 8 (округленно вверх) байт длиной.
Если size не кратно 8, эта функция включит младшие size % 8 битов из последнего байта в data.
Эта функция была добавлена в Qt 5.11.
См. также bits().
bool QBitArray::isEmpty() const
Возвращает true если размер этого массива битов равен 0; иначе возвращает false.
См. также size().
bool QBitArray::isNull() const
Возвращает true если этот массив битов равен null; иначе возвращает false.
Пример:
QBitArray().isNull(); // returns true QBitArray(0).isNull(); // returns false QBitArray(3).isNull(); // returns false
Qt различает нулевые и пустые массивы битов по историческим причинам. Для большинства приложений важно, содержит ли массив битов какие-либо данные, и это можно определить с помощью isEmpty().
См. также isEmpty().
void QBitArray::resize(int size)
Изменяет размер массива битов на size битов.
Если size больше текущего размера, массив битов расширяется до size бит, с добавлением дополнительных битов в конец. Новые биты инициализируются значением false (0).
Если size меньше текущего размера, биты удаляются с конца.
См. также size().
void QBitArray::setBit(int i)
Устанавливает бит по индексу i в 1.
i должен быть корректным индексом в массиве битов (т.е., 0 <= i < size()).
См. также clearBit() и toggleBit().
void QBitArray::setBit(int i, bool value)
Это перегруженная функция.
Устанавливает бит по индексу i в значение value.
int QBitArray::size() const
Возвращает количество битов, хранящихся в массиве битов.
См. также resize().
void QBitArray::swap(QBitArray &other)
Меняет местами массив битов other с этим массивом битов. Эта операция очень быстрая и никогда не терпит неудачу.
Эта функция была добавлена в Qt 4.8.
bool QBitArray::testBit(int i) const
Возвращает true если бит по индексу i равен 1; иначе возвращает false.
i должен быть корректным индексом в массиве битов (т.е., 0 <= i < size()).
См. также setBit() и clearBit().
bool QBitArray::toggleBit(int i)
Инвертирует значение бита по индексу i, возвращая предыдущее значение этого бита как true (если он был установлен) или false (если он был сброшен).
Если предыдущее значение было 0, новое значение будет 1. Если предыдущее значение было 1, новое значение будет 0.
i должен быть корректным индексом в массиве битов (т.е., 0 <= i < size()).
См. также setBit() и clearBit().
void QBitArray::truncate(int pos)
Усекает массив битов по индексу pos.
Если pos выходит за пределы массива, ничего не происходит.
См. также resize().
bool QBitArray::operator!=(const QBitArray &other) const
Возвращает true если other не равно этому массиву битов; иначе возвращает false.
См. также operator==().
QBitArray &QBitArray::operator&=(const QBitArray &other)
Выполняет операцию И над всеми битами в этом массиве битов и other. Присваивает результат этому массиву битов и возвращает ссылку на него.
Результат имеет длину самого длинного из двух массивов битов, при этом любые отсутствующие биты (если один массив короче другого) считаются равными 0.
Пример:
QBitArray a(3); QBitArray b(2); a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 1; // b: [ 1, 1 ] a &= b; // a: [ 1, 0, 0 ]
См. также operator&(), operator|=(), operator^=(), и operator~().
bool QBitArray::operator==(const QBitArray &other) const
Возвращает true если other равно этому массиву битов; иначе возвращает false.
См. также operator!=().
QBitRef QBitArray::operator[](int i)
Возвращает бит в позиции i в виде изменяемой ссылки.
i должно быть корректной позицией в массиве бит (т.е., 0 <= i < размер()).
Пример:
QBitArray a(3); a[0] = false; a[1] = true; a[2] = a[0] ^ a[1];
Возвращаемое значение имеет тип QBitRef, вспомогательный класс для QBitArray. Когда вы получаете объект типа QBitRef, вы можете присвоить ему значение, и присвоение будет применено к биту в QBitArray, из которого вы получили ссылку.
Функции testBit(), setBit() и clearBit() немного быстрее.
См. также at(), testBit(), setBit() и clearBit().
bool QBitArray::operator[](int i) const
Это перегруженная функция.
QBitRef QBitArray::operator[](uint i)
Это перегруженная функция.
bool QBitArray::operator[](uint i) const
Это перегруженная функция.
QBitArray &QBitArray::operator^=(const QBitArray &other)
Выполняет операцию XOR между всеми битами в этом массиве бит и other. Присваивает результат этому массиву бит и возвращает ссылку на него.
Результат имеет длину самого длинного из двух массивов бит, а любые отсутствующие биты (если один массив короче другого) считаются равными 0.
Пример:
QBitArray a(3); QBitArray b(2); a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 1; // b: [ 1, 1 ] a ^= b; // a: [ 0, 1, 1 ]
См. также operator^(), operator&=(), operator|=() и operator~().
QBitArray &QBitArray::operator|=(const QBitArray &other)
Выполняет операцию OR между всеми битами в этом массиве бит и other. Присваивает результат этому массиву бит и возвращает ссылку на него.
Результат имеет длину самого длинного из двух массивов бит, а любые отсутствующие биты (если один массив короче другого) считаются равными 0.
Пример:
QBitArray a(3); QBitArray b(2); a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 1; // b: [ 1, 1 ] a |= b; // a: [ 1, 1, 1 ]
См. также operator|(), operator&=(), operator^=() и operator~().
QBitArray QBitArray::operator~() const
Возвращает массив бит, содержащий инвертированные биты этого массива бит.
Пример:
QBitArray a(3); QBitArray b; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b = ~a; // b: [ 0, 1, 0 ]
См. также operator&(), operator|() и operator^().
Связанные нечлены
QBitArray operator&(const QBitArray &a1, const QBitArray &a2)
Возвращает массив бит, который является результатом логического И между массивами бит a1 и a2.
Результат имеет длину самого длинного из двух массивов бит, а любые отсутствующие биты (если один массив короче другого) считаются равными 0.
Пример:
QBitArray a(3); QBitArray b(2); QBitArray c; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 1; // b: [ 1, 1 ] c = a & b; // c: [ 1, 0, 0 ]
См. также operator&=(), operator|() и operator^().
QDataStream &operator<<(QDataStream &out, const QBitArray &ba)
Записывает массив бит ba в поток out.
См. также Формат операторов QDataStream.
QDataStream &operator>>(QDataStream &in, QBitArray &ba)
Считывает массив бит в ba из потока in.
См. также Формат операторов QDataStream.
QBitArray operator^(const QBitArray &a1, const QBitArray &a2)
Возвращает массив бит, который является результатом XOR между массивами бит a1 и a2.
Результат имеет длину самого длинного из двух массивов бит, а любые отсутствующие биты (если один массив короче другого) считаются равными 0.
Пример:
QBitArray a(3); QBitArray b(2); QBitArray c; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 1; // b: [ 1, 1 ] c = a ^ b; // c: [ 0, 1, 1 ]
См. также operator^=(), operator&() и operator|().
QBitArray operator|(const QBitArray &a1, const QBitArray &a2)
Возвращает массив бит, который является результатом OR между массивами бит a1 и a2.
Результат имеет длину самого длинного из двух массивов бит, а любые отсутствующие биты (если один массив короче другого) считаются равными 0.
Пример:
QBitArray a(3); QBitArray b(2); QBitArray c; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b[0] = 1; b[1] = 1; // b: [ 1, 1 ] c = a | b; // c: [ 1, 1, 1 ]
См. также QBitArray::operator|=(), operator&() и operator^().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qbitarray.html