QT::QBitArray

來源:互聯網
上載者:User

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中。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.