QBitArray 类

QBitArray 类提供了一个位数组。 更多...

头文件 #include <QBitArray>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意: 本类中所有函数都是 可重入的.

公共函数

QBitArray()
QBitArray(qsizetype size, bool value = false)
QBitArray(const QBitArray &other)
QBitArray(QBitArray &&other)
boolat(qsizetype i) const
const char *bits() const
voidclear()
voidclearBit(qsizetype i)
qsizetypecount() const
qsizetypecount(bool on) const
boolfill(bool value, qsizetype size = -1)
voidfill(bool value, qsizetype begin, qsizetype end)
boolisEmpty() const
boolisNull() const
voidresize(qsizetype size)
voidsetBit(qsizetype i)
voidsetBit(qsizetype i, bool value)
qsizetypesize() const
voidswap(QBitArray &other)
booltestBit(qsizetype i) const
(since 6.0) quint32toUInt32(QSysInfo::Endian endianness, bool *ok = nullptr) const
booltoggleBit(qsizetype i)
voidtruncate(qsizetype pos)
booloperator!=(const QBitArray &other) const
QBitArray &operator&=(QBitArray &&other)
QBitArray &operator&=(const QBitArray &other)
QBitArray &operator=(const QBitArray &other)
QBitArray &operator=(QBitArray &&other)
booloperator==(const QBitArray &other) const
QBitRefoperator[](qsizetype i)
booloperator[](qsizetype i) const
QBitArray &operator^=(QBitArray &&other)
QBitArray &operator^=(const QBitArray &other)
QBitArray &operator|=(QBitArray &&other)
QBitArray &operator |=(const QBitArray &other)

静态公有成员

QBitArrayfromBits(const char *data, qsizetype size)
QBitArrayoperator &(const QBitArray &a1, const QBitArray &a2)
QBitArrayoperator &(QBitArray &&a1, const QBitArray &a2)
QBitArrayoperator &(const QBitArray &a1, QBitArray &&a2)
QBitArrayoperator &(QBitArray &&a1, QBitArray &&a2)
QDataStream &operator <<(QDataStream &out, const QBitArray &ba)
QDataStream &operator >>(QDataStream &in, QBitArray &ba)
QBitArrayoperator ^(const QBitArray &a1, const QBitArray &a2)
QBitArrayoperator ^(QBitArray &&a1, const QBitArray &a2)
QBitArrayoperator ^(const QBitArray &a1, QBitArray &&a2)
QBitArrayoperator ^(QBitArray &&a1, QBitArray &&a2)
QBitArrayoperator |(const QBitArray &a1, const QBitArray &a2)
QBitArrayoperator |(QBitArray &&a1, const QBitArray &a2)
QBitArrayoperator |(const QBitArray &a1, QBitArray &&a2)
QBitArrayoperator |(QBitArray &&a1, QBitArray &&a2)
QBitArrayoperator ~(QBitArray a)

详细描述

QBitArray 是一个数组,可以访问单个位并提供操作符(ANDORXORNOT),这些操作符作用于位数组。它使用 隐式共享(写时复制)以减少内存使用并避免不必要的数据复制。

以下代码构建了一个包含 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()。

另请参阅QByteArrayQList

成员函数文档

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 给出。

另请参阅fromBits() 和 size.

void QBitArray::clear()

清除位数组的所有内容并使其为空。

另请参阅resize() 和 isEmpty.

void QBitArray::clearBit(qsizetype i)

将索引位置 i 的位设置为 0。

i 必须是位数组中的一个有效索引位置(即,0 <= i < size()).

另请参阅setBit() 和 toggleBit.

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 的位设置到 (但不包括) endvalue

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)

创建一个位于 dataQBitArray,具有 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()).

另请参阅 clearBit() 和 toggleBit

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()).

另请参阅 setBit() 和 clearBit

[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()).

另请参阅 setBit() 和 clearBit

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)

返回一个位数组,它是位数组a1a2的逻辑与。

结果长度为两个位数组中最长的,对于较短的数组中缺失的位视为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)

返回一个位数组,它是位数组 a1a2 的或操作结果。

结果长度为两个位数组中最长的,对于较短的数组中缺失的位视为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)

返回一个位数组,它是位数组 a1a2 的异或操作结果。

结果长度为两个位数组中最长的,对于较短的数组中缺失的位视为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 ]

另请参阅 operator&(),operator|() 和 operator^().

© 2024 Qt 公司有限公司。其中包含的文档贡献为各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议第 1.3 版 许可的。Qt 和相应的标志是芬兰以及/或其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。