Класс QBitArray
Класс QBitArray предоставляет массив битов. Подробнее...
| Заголовок: | #include <QBitArray> |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются перевходовыми.
Открытые функции
| QBitArray() | |
| QBitArray(int size, bool value = false) | |
| QBitArray(const QBitArray &other) | |
| QBitArray(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 = ...) |
| 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) |
| QBitArray & | operator=(const QBitArray &other) |
| QBitArray & | operator=(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 предоставляет массив битов.
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()
Создаёт пустой массив битов.
См. также isEmpty().
QBitArray::QBitArray(int size, bool value = false)
Создаёт массив битов размером size. Биты инициализируются значением value, которое по умолчанию равно false (0).
QBitArray::QBitArray(const QBitArray &other)
Создаёт копию other.
Эта операция выполняется за постоянное время, так как QBitArray использует явное совместное использование. Это делает возврат QBitArray из функции очень быстрым. Если изменён общий экземпляр, он будет скопирован (копирование при записи), и это занимает линейное время.
См. также operator=().
QBitArray::QBitArray(QBitArray &&other)
Перемещающая конструкция QBitArray экземпляра, привязывая его к тому же объекту, к которому указывал other.
Эта функция была введена в Qt 5.2.
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 = ...)
Устанавливает каждый бит в массиве битов в значение 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)
Выполняет операцию AND между всеми битами в этом массиве битов и 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~().
QBitArray &QBitArray::operator=(const QBitArray &other)
Присваивает other этому массиву битов и возвращает ссылку на этот массив битов.
QBitArray &QBitArray::operator=(QBitArray &&other)
Перемещает other в этот массив битов и возвращает ссылку на этот массив битов.
Эта функция была введена в Qt 5.2.
bool QBitArray::operator==(const QBitArray &other) const
Возвращает true если other равно этому массиву битов; в противном случае возвращает false.
См. также operator!=().
QBitRef QBitArray::operator[](int i)
Возвращает бит по индексу i в виде изменяемой ссылки.
i должен быть допустимым индексом в массиве битов (т.е., 0 <= i < size()).
Пример:
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/archives/qt-5.11/qbitarray.html