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,或是未來若有任何比較特殊的應用會在對這片文章做更新。