QBitArray Class

QBitArrayクラスはビットの配列を提供する。詳細...

Header: #include <QBitArray>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

このクラスは等価比較可能です。

注意:このクラスの関数はすべてリエントラントです。

パブリック関数

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)
QBitArray &operator&=(QBitArray &&other)
QBitArray &operator&=(const QBitArray &other)
QBitArray &operator=(QBitArray &&other)
QBitArray &operator=(const QBitArray &other)
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)
bool operator!=(const QBitArray &lhs, const QBitArray &rhs)
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)
QDataStream &operator<<(QDataStream &out, const QBitArray &ba)
bool operator==(const QBitArray &lhs, const QBitArray &rhs)
QDataStream &operator>>(QDataStream &in, QBitArray &ba)
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)
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)
QBitArray operator~(QBitArray a)

詳細説明

QBitArray は個々のビットにアクセスできる配列で、ビットの配列全体に作用する演算子 (AND,OR,XOR,NOT) を提供します。暗黙の共有(コピー・オン・ライト)を使用することで、メモリ使用量を削減し、不要なデータのコピーを避けることができる。

以下のコードは、false(0)に初期化された200ビットを含むQBitArrayを構築する:

QBitArray ba(200);

ビットをtrueに初期化するには、コンストラクタの第2引数にtrue を渡すか、後でfill ()を呼び出します。

QBitArrayは、C++の配列と同様に0ベースのインデックスを使用します。特定のインデックス位置のビットにアクセスするには、 operator[]() を使用します。非 const ビット配列では、operator[]() は、代入の左辺で使用できるビットへの参照を返します。例えば

QBitArray ba;
ba.resize(3);
ba[0] = true;
ba[1] = false;
ba[2] = true;

技術的な理由から、配列のビットにアクセスするには、operator[]() よりも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 はヌル・ビット配列と空ビット配列を区別しています。ヌルビット配列は、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 およびQListも参照のこと

メンバ関数ドキュメント

QBitArray &QBitArray::operator&=(QBitArray &&other)

QBitArray &QBitArray::operator&=(const QBitArray &other)

このビット配列のすべてのビットとother との AND 演算を実行します。結果をこのビット配列に代入し、その参照を返す。

結果は、2つのビット配列のうち、最も長い方のビット配列の長さを持ち、(一方のビット配列が他方のビット配列より短い場合)足りないビットは 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 演算を行う。結果をこのビット配列に代入し、その参照を返します。

結果は、2つのビット配列のうち、最も長い方のビット配列の長さを持ち、(一方のビット配列が他方のビット配列より短い場合)足りないビットは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 演算を実行する。結果をこのビット配列に代入し、その参照を返します。

結果は、2つのビット配列のうち、最も長い方のビット配列の長さを持ち、(一方のビット配列が他方のビット配列より短い場合)不足するビットは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 を返すのが非常に高速になります。共有インスタンスが変更された場合、それはコピーされ(copy-on-write)、線形時間がかかります。

operator=()も参照してください

[noexcept] QBitArray::QBitArray(QBitArray &&other)

Move-QBitArrayインスタンスを構築し、other が指していたのと同じオブジェクトを指すようにする。

bool QBitArray::at(qsizetype i) const

インデックス位置i にあるビットの値を返す。

i はビット配列の有効なインデックス位置でなければならない(つまり、0 <= < ())。i size

operator[]()も参照のこと

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 が真の場合、この関数はビット配列に格納されている 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)

これはオーバーロードされた関数である。

end からvalue までのインデックス位置begin のビットを設定します。

begin は、ビット配列の有効なインデックス位置でなければなりません (0 <= < ())。begin size

end は、有効なインデックス位置であるか、または () と等しいかのいずれかでなければなりません。この場合、fill 処理は配列の最後まで実行されます (0 <= <= ())。size 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)

data に位置する密なビット配列で、size ビットを持つQBitArray を作成します。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 では、歴史的な理由からヌルビット配列と空のビット配列を区別しています。ほとんどのアプリケーションで重要なのは、ビット配列にデータが含まれているかどうかであり、これはisEmpty() を使って判断することができます。

isEmpty()も参照

void QBitArray::resize(qsizetype size)

ビット配列をsize ビットにリサイズする。

size が現在のサイズより大きい場合、ビット配列は拡張されてsize ビットになり、余分なビットが最後に追加される。新しいビットは偽(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

int に変換されたビット配列を返します。変換はendianness に基づいて行われる。配列の最初の 32 ビットまでをquint32 に変換し、endianness に従ってそれを返す。ok が NULL ポインタでなく、配列が 32 ビット以上の場合、ok は false に設定され、この関数は 0 を返します。それ以外の場合は true に設定されます。

この関数は Qt 6.0 で導入されました。

bool QBitArray::toggleBit(qsizetype i)

インデックスの位置i にあるビットの値を反転し、そのビットの前の値を true(設定されていた場合)または false(設定されていなかった場合)として返します。

前の値が 0 の場合、新しい値は 1 になります。前の値が1だった場合、新しい値は0になります。

i は、ビット配列の有効なインデックス位置でなければならない(すなわち、0 <= < ())。i size

setBit() およびclearBit()も参照のこと

void QBitArray::truncate(qsizetype pos)

インデックス位置pos でビット配列を切り捨てる。

pos が配列の終端を超えている場合は、何も起こらない。

resize() も参照

[noexcept] QBitArray &QBitArray::operator=(QBitArray &&other)

other をこのビット配列に移動し、このビット配列への参照を返します。

[noexcept] QBitArray &QBitArray::operator=(const QBitArray &other)

other をこのビット配列に代入し、このビット配列への参照を返します。

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];

戻り値は、QBitArray のヘルパークラスである QBitRef 型です。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 を AND したビット配列を返します。

結果は、2つのビット配列のうち最も長い方のビット配列の長さを持ち、欠落しているビット(一方の配列が他方の配列より短い場合)は 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 の OR をビット配列として返す。

結果は、2つのビット配列のうち最も長い方のビット配列の長さを持ち、欠落しているビット(一方のビット配列が他方のビット配列より短い場合)は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 の XOR をビット配列として返す。

結果は、2つのビット配列のうち最も長い方のビット配列の長さを持ち、欠落しているビット(一方のビット配列が他方のビット配列より短い場合)は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|()も参照のこと

[noexcept] bool operator!=(const QBitArray &lhs, const QBitArray &rhs)

lhsrhs のビット配列と等しくない場合はtrue を返し、そうでない場合はfalse を返す。

operator==()も参照の こと。

QDataStream &operator<<(QDataStream &out, const QBitArray &ba)

ビット配列ba をストリームout に書き込みます。

QDataStream 演算子の形式も参照して ください。

[noexcept] bool operator==(const QBitArray &lhs, const QBitArray &rhs)

lhs がビット配列rhs と等しい場合はtrue を返し、そうでない場合はfalse を返します。

operator!=()も参照して ください。

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 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。