QBitArray


QBitArray是以位元(bit)為基礎的陣列,它能讓使用者很簡單的控制位元,也能透過布林運算式(OR,AND,NOT,XOR)直接對QBitArray做運算。

我們來看一下如何建構QBitArray物件。

//QBitArray(int size, bool value=false);
QBitArray array1(10);
//QBitArray(const QBitArray & other);
QBitArray array2(array1);

首先我們看一下第一個建構子,我們可以直接給定一個值為QBitArray的陣列大小,而這個陣列的每個元素接會被初始化為false,也就是0。
此外也可以利用送入另一個QBitArray來創建一個一模一樣的QBitArray物件。

如果我們沒有送入任何參數給QBitArray我們就會得到一個完全沒有任何元素的空陣列。

QBitArray emptyArray;

QBitArray可以透過resize()函式來重新定義位元陣列的大小,若原本大小大於改變後的,就會直接刪去最後多出來的部份,若原本大小小於後來大小,則會將新增的元素都初始化為0。

QBitArray array3(2);
array3[0]=1;array3[1]=0;
// array3 = {1,0}
array3.resize(5);
// array3 = {1,0,0,0,0}
array3[2]=1;array3[3]=1;array3[4]=0;
// array3 = {1,0,1,1,0}

布林運算式
在開頭的時候有說過在QBitArray物件中可以利用布林運算式:AND/OR/XOR還有NOT來直接操作資料,那在這裡就要來示範如何使用。

QBitArray array4(10);
for(int i=0;i<10;i++){
    array4[i]=i%2;
};
// array4 = {0,1,0,1,0,1,0,1,0,1}
QBitArray array5(10);
array5[0] = 0;array5[1] = 0;array5[2] = 1;array5[3] = 1;
array5[4] = 1;array5[5] = 1;array5[6] = 1;array5[7] = 0;
array5[8] = 0;array5[9] = 1;
// array5 = {0,0,1,1,1,1,1,0,0,1}
QBitArray arrayAND(10);
arrayAND = array5 & array6; // array5 AND array6;
// arrayAND = {0,0,0,1,0,1,0,0,0,1};
QBitArray arrayOR(10);
arrayOR = array5 | array6; // array5 OR array6
// arrayOR = {0,1,1,1,1,1,1,1,0,1}
QBitArray arrayXOR(10);
arrayXOR = array5 ^ array6; //array5 XOR array6
// arrayXOR = {0,1,1,0,1,0,1,1,0,0}
QBitArray arrayNOT(10);
arrayNOT = ~array5; // NOT array5
// arrayNOT = {1,1,0,0,0,0,0,1,1,0}

此外,QBitArray也提供了簡短的寫法:
如果你今天想要這樣寫:

array5 = array5 ^ array6;

那麼你就可以寫成:

array5 ^= array6;

只要有關布林表達式的都可以這樣寫喔。

其實利用布林表達式在運算時兩個陣列大小不一定要一樣,比較大的那個陣列多出來的部份會直接被忽略。

QBitArray array1(3);
QBitArray array2(4);
array1[0]=0;array1[1]=0;array1[2]=1;
// array1 = {0,0,1};
array1[0]=0;array1[1]=0;array1[2]=1;array1[3]=1;
// array2 = {0,1,1,1};

array2 &= array1;
// array2 = {0,0,1,1};
array1 |= array2;
// array1 = {0,1,1};

接下來要講有關Null以及Empty的差別:

QBitArray().isNull(); 
//回傳true,因為目前並不是一個有效的陣列。
QBitArray().isEmpty();
//回傳true,因為陣列並不有效,因此視為空陣列。

QBitArray(0).isNull();
//回傳false,因為這個已經含有了0個元素。
QBitArray(0).isEmpty();
//回傳true,因為它其實沒有含任何一個元素。

QBitArray(3).isNull();
//回傳false,因為這個陣列已經含有了3個元素。
QBitArray(3).isEmpty();
//回傳false,因為建構時會將其初始化為false因此這個陣列已經含有了3個false元素。

那還有其他好用的函式及功能,請參照QBitArray Document,或是未來若有任何比較特殊的應用會在對這片文章做更新。

results matching ""

    No results matching ""