QBitArray 类
QBitArray 类提供了一个位数组。 更多...
头文件 | #include <QBitArray> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
- 所有成员的列表,包括继承的成员
- QBitArray 是 隐式共享类 的一部分。
注意: 本类中所有函数都是 可重入的.
公共函数
QBitArray() | |
QBitArray(qsizetype size, bool value = false) | |
QBitArray(const QBitArray &other) | |
QBitArray(QBitArray &&other) | |
bool | at(qsizetype i) const |
const char * | bits() const |
void | clear() |
void | clearBit(qsizetype i) |
qsizetype | count() const |
qsizetype | count(bool on) const |
bool | fill(bool value, qsizetype size = -1) |
void | fill(bool value, qsizetype begin, qsizetype end) |
bool | isEmpty() const |
bool | isNull() const |
void | resize(qsizetype size) |
void | setBit(qsizetype i) |
void | setBit(qsizetype i, bool value) |
qsizetype | size() const |
void | swap(QBitArray &other) |
bool | testBit(qsizetype i) const |
(since 6.0) quint32 | toUInt32(QSysInfo::Endian endianness, bool *ok = nullptr) const |
bool | toggleBit(qsizetype i) |
void | truncate(qsizetype pos) |
bool | operator!=(const QBitArray &other) const |
QBitArray & | operator&=(QBitArray &&other) |
QBitArray & | operator&=(const QBitArray &other) |
QBitArray & | operator=(const QBitArray &other) |
QBitArray & | operator=(QBitArray &&other) |
bool | operator==(const QBitArray &other) const |
QBitRef | operator[](qsizetype i) |
bool | operator[](qsizetype i) const |
QBitArray & | operator^=(QBitArray &&other) |
QBitArray & | operator^=(const QBitArray &other) |
QBitArray & | operator|=(QBitArray &&other) |
QBitArray & | operator |=(const QBitArray &other) |
静态公有成员
QBitArray | fromBits(const char *data, qsizetype size) |
相关非成员
QBitArray | operator &(const QBitArray &a1, const QBitArray &a2) |
QBitArray | operator &(QBitArray &&a1, const QBitArray &a2) |
QBitArray | operator &(const QBitArray &a1, QBitArray &&a2) |
QBitArray | operator &(QBitArray &&a1, 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 ^(QBitArray &&a1, const QBitArray &a2) |
QBitArray | operator ^(const QBitArray &a1, QBitArray &&a2) |
QBitArray | operator ^(QBitArray &&a1, QBitArray &&a2) |
QBitArray | operator |(const QBitArray &a1, const QBitArray &a2) |
QBitArray | operator |(QBitArray &&a1, const QBitArray &a2) |
QBitArray | operator |(const QBitArray &a1, QBitArray &&a2) |
QBitArray | operator |(QBitArray &&a1, QBitArray &&a2) |
QBitArray | operator ~(QBitArray a) |
详细描述
QBitArray 是一个数组,可以访问单个位并提供操作符(AND、OR、XOR 和 NOT),这些操作符作用于位数组。它使用 隐式共享(写时复制)以减少内存使用并避免不必要的数据复制。
以下代码构建了一个包含 200 位且初始化为 false(0)的 QBitArray
QBitArray ba(200);
要将位初始化为 true,请将 true 作为构造函数的第二参数传递,或稍后再调用 fill()。
QBitArray 使用 0 基索引,就像 C++ 数组一样。要访问特定索引位置的位,可以使用操作符 []()。在非 const 位数组上,操作符 []() 返回对位的引用,可以在赋值运算符的左边使用。例如
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 支持 &
(AND)、|
(OR)、^
(XOR)、~
(NOT),以及 &=
、|=
和 ^=
。这些操作符与同名内置 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 区分了空位数组和空位数组。一个 null 位数组是使用 QBitArray 的默认构造函数初始化的位数组。一个 empty 位数组是任何大小为 0 的位数组。null 位数组始终为空,但空位数组不一定是 null
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() 之外,所有函数都将 null 位数组视为空位数组相同;例如,QBitArray() 等于 QBitArray(0)。我们建议您始终使用 isEmpty() 并避免使用 isNull()。
另请参阅QByteArray 和 QList。
成员函数文档
QBitArray &QBitArray::operator&=(QBitArray &&other)
QBitArray &QBitArray::operator&=(const QBitArray &other)
在位数组中,对这个位数组和other的每个位执行AND操作。将结果赋给这个位数组,并返回对其的引用。
结果长度为两个位数组中最长的,对于较短的数组中缺失的位视为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|=(QBitArray &&other)
QBitArray &QBitArray::operator|=(const QBitArray &other)
在这个位数组和other的所有位之间执行OR操作。将结果赋给这个位数组,并返回对其的引用。
结果长度为两个位数组中最长的,对于较短的数组中缺失的位视为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^=(QBitArray &&other)
QBitArray &QBitArray::operator^=(const QBitArray &other)
在位数组中,对这个位数组和other的所有位执行XOR操作。将结果赋给这个位数组,并返回对其的引用。
结果长度为两个位数组中最长的,对于较短的数组中缺失的位视为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~()。
[noexcept]
QBitArray::QBitArray()
构造一个空的位数组。
另请参阅isEmpty()。
[explicit]
QBitArray::QBitArray(qsizetype size, bool value = false)
构造一个包含size位的位数组。位被初始化为value,默认为false(0)。
[noexcept]
QBitArray::QBitArray(const QBitArray &other)
构造一个other的副本。
此操作需要常数时间,因为QBitArray是隐式共享的。这使得从函数中返回QBitArray非常快。如果共享实例被修改,它将被复制(写时复制),这需要线性时间。
另请参阅operator=()。
[noexcept]
QBitArray::QBitArray(QBitArray &&other)
移动构造一个QBitArray实例,使其指向other指向的同一对象。
bool QBitArray::at(qsizetype i) const
返回位索引位置 i 的值。
i 必须是位数组中的一个有效索引位置(即,0 <= i < size()).
另请参阅操作符[].
const char *QBitArray::bits() const
返回指向该 QBitArray 稠密位数组的指针。每个字节的位从最低位开始计数。最后字节中相关的位数由 size() % 8
给出。
void QBitArray::clear()
清除位数组的所有内容并使其为空。
void QBitArray::clearBit(qsizetype i)
将索引位置 i 的位设置为 0。
i 必须是位数组中的一个有效索引位置(即,0 <= i < size()).
qsizetype QBitArray::count() const
等同于 size.
qsizetype QBitArray::count(bool on) const
如果 on 是 true,则此函数返回位数组中存储的 1 位数量;否则返回 0 位数量。
bool QBitArray::fill(bool value, qsizetype 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, qsizetype begin, qsizetype 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 ]
[静态]
QBitArray QBitArray::fromBits(const char *data, qsizetype size)
创建一个位于 data 的 QBitArray,具有 size 位。位于 data 的字节数组至少需要 size / 8 (向上取整) 字节。
如果 size 不是 8 的倍数,则此函数将包括 data 中最低的 size % 8 位。
另请参阅 bits。
bool QBitArray::isEmpty() const
如果这个位数组大小为0,则返回 true
;否则返回 false。
另请参阅 size。
bool QBitArray::isNull() const
如果这个位数组是null,则返回 true
;否则返回 false
。
示例
QBitArray().isNull(); // returns true QBitArray(0).isNull(); // returns false QBitArray(3).isNull(); // returns false
Qt 为了历史原因,在 null 位数组与空位数组之间进行了区分。对于大多数应用程序来说,重要的是位数组是否包含任何数据,这可以通过 isEmpty() 来确定。
另请参阅isEmpty()。
void QBitArray::resize(qsizetype size)
将位数组的大小调整为 size 位。
如果 size 大于当前大小,位数组将扩展到 size 位,额外的位将添加到末尾。新位被初始化为 false(0)。
如果 size 小于当前大小,则从末尾移除位。
另请参阅 size。
void QBitArray::setBit(qsizetype i)
将索引位置 i 的位设置为 1。
i 必须是位数组中的一个有效索引位置(即,0 <= i < size()).
void QBitArray::setBit(qsizetype i, bool value)
这是一个重载函数。
将索引位置 i 的位设置为 value。
qsizetype QBitArray::size() const
返回存储在位数组中的位数。
另请参阅resize.
[noexcept]
void QBitArray::swap(QBitArray &other)
与此位数组交换位数组 other。此操作非常快,永远不会失败。
bool QBitArray::testBit(qsizetype i) const
如果索引位置 i 的位是 1,则返回 true
;否则返回 false
。
i 必须是位数组中的一个有效索引位置(即,0 <= i < size()).
[noexcept, since 6.0]
quint32 QBitArray::toUInt32(QSysInfo::Endian endianness, bool *ok = nullptr) const
将位数组转换为整型数组。转换基于 endianness。转换数组的前32位到 quint32
并返回它,遵循 endianness。如果 ok 不是空指针,并且数组包含超过32位,则将 ok 设置为 false 并此函数返回零;否则设置为 true。
此函数自 Qt 6.0 起被引入。
bool QBitArray::toggleBit(qsizetype i)
翻转索引位置i的位值,返回该位的原始值,如果是设置为true(设置为1)或为false(未设置)。
如果原始值是0,新值将是1。如果原始值是1,新值将是0。
i 必须是位数组中的一个有效索引位置(即,0 <= i < size()).
void QBitArray::truncate(qsizetype pos)
在索引位置pos处截断位数组。
如果pos超出数组末尾,则不执行任何操作。
另请参阅resize.
bool QBitArray::operator!=(const QBitArray &other) const
如果other与该位数组不相等,则返回true
;否则返回false
。
另请参阅operator==().
[noexcept]
QBitArray &QBitArray::operator=(const QBitArray &other)
将other赋给此位数组,并返回对此位数组的引用。
[noexcept]
QBitArray &QBitArray::operator=(QBitArray &&other)
将other移动到此位数组,并返回对此位数组的引用。
bool QBitArray::operator==(const QBitArray &other) const
如果other与此位数组相等,则返回true
;否则返回false
。
另请参阅operator!=().
QBitRef QBitArray::operator[](qsizetype 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[](qsizetype i) const
这是一个重载函数。
相关非成员
QBitArray operator&(QBitArray &&a1, QBitArray &&a2)
QBitArray operator&(QBitArray &&a1, const QBitArray &a2)
QBitArray operator&(const QBitArray &a1, QBitArray &&a2)
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^().
QBitArray operator|(QBitArray &&a1, QBitArray &&a2)
QBitArray operator|(QBitArray &&a1, const QBitArray &a2)
QBitArray operator|(const QBitArray &a1, QBitArray &&a2)
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, 1, 1 ]
另请参阅 QBitArray::operator|=(),operator&() 和 operator^().
QBitArray operator^(QBitArray &&a1, QBitArray &&a2)
QBitArray operator^(QBitArray &&a1, const QBitArray &a2)
QBitArray operator^(const QBitArray &a1, QBitArray &&a2)
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: [ 0, 1, 1 ]
另请参阅 operator^=(),operator&() 和 operator|().
QDataStream &operator<<(QDataStream &out, const QBitArray &ba)
将位数组 ba 写入流 out。
另请参阅 QDataStream 运算符的格式.
QDataStream &operator>>(QDataStream &in, QBitArray &ba)
从流 in 读取位数组到 ba。
另请参阅 QDataStream 运算符的格式.
QBitArray operator~(QBitArray a)
返回包含位数组 a 的反转位的位数组。
示例
QBitArray a(3); QBitArray b; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b = ~a; // b: [ 0, 1, 0 ]
© 2024 Qt 公司有限公司。其中包含的文档贡献为各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议第 1.3 版 许可的。Qt 和相应的标志是芬兰以及/或其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。