QbitArray類提供位操作序列。
include<QBitArray>
公有函數:
QBitArray ()QBitArray ( int size, bool value = false )QBitArray ( const QBitArray & other )bool at ( int i ) constvoid clear ()void clearBit ( int i )int count () constint count ( bool on ) constbool fill ( bool value, int size = -1 )void fill ( bool value, int begin, int end )bool isEmpty () constbool isNull () constvoid resize ( int size )void setBit ( int i )void setBit ( int i, bool value )int size () constbool testBit ( int i ) constbool toggleBit ( int i )void truncate ( int pos )bool operator!= ( const QBitArray & other ) constQBitArray & operator&= ( const QBitArray & other )QBitArray & operator= ( const QBitArray & other )bool operator== ( const QBitArray & other ) constQBitRef operator[] ( int i )bool operator[] ( int i ) constQBitRef operator[] ( uint i )bool operator[] ( uint i ) constQBitArray & operator^= ( const QBitArray & other )QBitArray & operator|= ( const QBitArray & other )QBitArrayoperator~ () const
涉及到得非成員函數:
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 )QBitArrayoperator| ( const QBitArray & a1, const QBitArray & a2 )
詳細描述:
QBitArray類提供了一個位序列。QBitArray類提供了訪問序列中單獨位的方法,也可以對序列中的位執行 與 、或、
異或操作(AND, OR ,NOT,XOR),提供隱式的記憶體共用機制,從而減少記憶體使用量率和不必要的資料複製。
下面的代碼初始化一個QBitArray對象,包含200個數位(BITS),全部初始化為0,即FALSE:
QBitArray ba(200);//ba包含200個0
把QBitArray中的某個數位初始化為TRUE,或者傳遞第二個參數作為QBitArray的建構函式,如QBitArray ba(200,TRUE),或者在之後調用fill()函數。附註:在QBitArray中TRUE對應1,FALSE對應0.
QBitArray用0作為起始下標,這點類似於C++,當我們訪問一個指定下標所對應的數位(BITS)時可以調用OPERATOR[]()。
在一個NON-CONST的位序列中,OPERATOR[]()返回一個可以用於左值的引用,例如:
QBitArray ba; ba.resize(3); ba[0] = true; ba[1] = false; ba[2] = true;
出於效能考慮,當我們訪問QBitArray中的指定位(BITS)時,testBit()和setBit()相對於OPERATOR[]()在效能上效率更高。例如:
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和EMPTY的,NULL對應於預設建構函式中的一個位,EMPTY在SIZE()返回0時被設定,一個NULL位總是EMPTY,但相反就不一定。例如:
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和EMPTY做相同的處理,例如:QBitArray()和QBitArray(0)的執行效果是一樣的,通常情況下,建議使用isEmpty(),而避免使用isNull().
成員函數描述:
QBitArray::QBitArray () //初始化一個為空白的位處理序列QBitArray::QBitArray ( int size, bool value = false )//初始化一個大小為size,預設情況下每一位(BITS)被初始化為FALSE即0QBitArray::QBitArray ( const QBitArray & other )//複製建構函式。通常該函數會消耗一個常數時間值,因為為序列是建立的記憶體共用機制上的,所以會以很快的速度//返回一個為位序列,如果共用執行個體被改變,該做操對應線性執行時間,主要消耗在讀寫上。bool QBitArray::at ( int i ) const//返回指定下標i處所對應的布爾值(要麼是0(FALSE),或者是1(TRUE)),給定的下標值必須有效,(0<=i<sisize() ).void QBitArray::clear ()//清空序列的內容,此時該序列位EMPTY,但不為NULL。void QBitArray::clearBit ( int i )//把指定下標i對應的值設定為0,給出的下標必須有效,不可產生溢出。int QBitArray::count () const//返回序列大小,等同於size().int QBitArray::count ( bool on ) const//如果參數on為true則返回序列中1的個數,如果參數on為false,則返回序列中0的個數。//例如:count(true)+count(false)==count()==size()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 ] void QBitArray::fill ( bool value, int begin, int end )//這是一個重載的函數。把該序列中begin<=size<end這段範圍的值設定成參數value所對應的值,參數begin和end//必須是一個有效範圍,否則會產生越界或者溢出。bool QBitArray::isEmpty () const//若果該序列的大小為0則返回true,否則返回falsebool QBitArray::isNull () const//如果該序列為NULL則返回true,否則返回false,例如: QBitArray().isNull(); // returns true QBitArray(0).isNull(); // returns false QBitArray(3).isNull(); // returns false//附註:出於曆史原因,QT嚴格區分NULL和EMPTY,在大多數應用中,判斷一個序列中是否包含有資料時,可以使用isEmpty()void QBitArray::resize ( int size )//把序列的大小重設為參數size所指定的大小,如果參數size所指定的大小比序列的當前size()要大,則在序列end()後追加額外的空間,//並把追加的空間的預設值設定為0.如果參數size所指定的值比序列的size()要小,則以逆序的方式從end()開始移除對應的位。void QBitArray::setBit ( int i )//把參數i所指定的序列下標所對應的位值設定為1,參數i必須是一個有效下標,否則會產生越界或溢出。void QBitArray::setBit ( int i, bool value )//這是一個重載的函數,把參數i所指定的下標所對應的序列位值設定成參數value所指定的值。int QBitArray::size () const//返回序列中位的個數的大小。bool QBitArray::testBit ( int i ) const//如果參數下標值i所對應的序列值為1則返回true,否則返回false.參數i必須是一個有效下標值,否則會產生越界或者溢出。bool QBitArray::toggleBit ( int i )//反轉下標i所對應的序列值,如果參數i所給定的下標,對應的序列值為0則反轉未1,如果對應的序列值為1俄反轉未0.參數i必須是一個有效下標值,否則會產生越界或者溢出。void QBitArray::truncate ( int pos )//截斷下標pos到end()這段序列值,如果pos超出end()所限定的範圍,則該操作無效。bool QBitArray::operator!= ( const QBitArray & other ) const//如果this序列等於other序列,則返回true,否則返回false.QBitArray & QBitArray::operator&= ( const QBitArray & other ) //在this序列和other序列的all bit上執行 &= 操作,把產生的結果值賦值誒this序列,並返回this序列的引用, //返回的序列會採用兩個序列中長度最長的那個,較短序列的空餘位添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] = 0; // b: [ 1, 1 ] a &= b; // a: [ 1, 0, 0 ]QBitArray & QBitArray::operator= ( const QBitArray & other )//把other序列賦值給this序列,並返回該序列的引用。bool QBitArray::operator== ( const QBitArray & other ) const//如果other序列等於this序列返回true,否則返回falseQBitRef QBitArray::operator[] ( int i )//返回下標i所對應的序列值,該傳回值可用於左值進行賦值運算,參數i必須是有效下標值,否則會產生越界或者溢出。例如: QBitArray a(3); a[0] = false; a[1] = true; a[2] = a[0] ^ a[1]; 相對而言testBit(), setBit(), and clearBit() 在執行效率上稍快一些。bool QBitArray::operator[] ( int i ) const//這是一個重載函數,如果下標i所對應的序列值位1則返回true,如果下標i所對應的序列值位0則返回falseQBitRef QBitArray::operator[] ( uint i )//重載函數,不同的是參數i是unsigned int 的類型重定義。並返回可用於左值賦值的引用bool QBitArray::operator[] ( uint i ) const//重載函數,不同的是參數是unsigned int QBitArray & QBitArray::operator^= ( const QBitArray & other )//在other和this序列間執行XOR異或操作,並把操作結果賦值給this序列,返回一個可用於左值賦值的引用值,//結果集取兩個序列中長度最長的那個,較短序列的空餘部分用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] = 0; // b: [ 1, 1 ] a ^= b; // a: [ 0, 1, 1 ] QBitArray & QBitArray::operator|= ( const QBitArray & other )//在other和this序列間執行OR(或)操作,並把操作集賦值給this序列,返回一個引用。//結果取兩個序列中長度最長的那個,較短序列的空餘部分用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] = 0; // b: [ 1, 1 ] a |= b; // a: [ 1, 1, 1 ] QBitArray QBitArray::operator~ () const//反轉序列中的每一個位,如果當前位是0則反轉為1,如果當前位是1則反轉為0,例如: QBitArray a(3); QBitArray b; a[0] = 1; a[1] = 0; a[2] = 1; // a: [ 1, 0, 1 ] b = ~a; // b: [ 0, 1, 0 ]
涉及到得非成員函數:
QBitArray operator& ( const QBitArray & a1, const QBitArray & a2 )//返回序列a1和序列a2在進行&操作後的序列集,如果a1.size()<a2.size(),或者a2.size()<a1.size(),則把較短序列擴充至較長序列所對應的長度,並在尾部填充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] = 0; // b: [ 1, 1 ] c = a & b; // c: [ 1, 0, 0 ] QBitArray operator^ ( const QBitArray & a1, const QBitArray & a2 )//返回序列a1和a2的XOR結果集,把較短序列擴充至較長序列所對應的長度,並在尾部用0填充,然後和較長序列進行XOR操作。例如: 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] = 0; // b: [ 1, 1 ] c = a ^ b; // c: [ 0, 1, 1 ] QBitArray operator| ( const QBitArray & a1, const QBitArray & a2 )//對序列a1和a2進行OR操作,並返回結果集,把較短序列擴充至較長序列所對應的長度,並在尾部用0填充,然後進行OR操作。例如: 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] = 0; // b: [ 1, 1 ] c = a | b; // c: [ 1, 1, 1 ]QDataStream & operator<< ( QDataStream & out, const QBitArray & ba )//把序列ba的每一位送至輸出緩衝區,進行輸出。QDataStream & operator>> ( QDataStream & in, QBitArray & ba )//讀取輸入資料流中的資料送入序列ba中。