C++ Primer學習筆記- 第三章:標準庫型別之四
四、標準庫bitset型別
標準庫中bitset型別用來處理二進位制位的有序集,bitset型別簡化了位集的處理,使用bitset時需要包含標頭檔案#include<bitset>
bitset物件的定義和初始化
bitset也是類模板,不過bitset型別物件之間的區別在於長度而不是型別,因此bitset模板的引數是長度型別
初始化方法 |
說明 |
bitset<n> b; |
b有n位,每位都為0 |
bitset<n> b(u); |
b是unsigned long型u的一個副本 |
bitset<n> b(s); |
b是string物件 |
bitset<n> b(s, pos, n); |
b是s中從位置pos開始的n個位的副本 |
用unsigned long值初始化bitset物件
用unsigned long值初始化bitset物件的時候,將long值轉化為二進位制模式,然後拷貝到bitset的右方(bitset右邊為低階位,左邊為高階位),string位數多了將被截斷,少了bitset將在前面補零。
用string物件初始化bitset物件從string物件初始化bitset物件,需要注意的是,複製拷貝相當於從string位模式平移到了bitset。
例如:
string str(”11001010”);
bitset<32> bitvec(str);
這個時候,bitvec是這樣的:0000 0000 0000 0000 0000 0000 1100 1010最右邊是bitset的低階位,即bitvec[0],bitset[1] …
bitset物件上的操作
操作呼叫方式 |
操作說明 |
b.any() |
測試b中是否有存在1的位 |
b.none() |
測試b中是否全0 |
b.count() |
測試b中置1的位個數 |
b.size() |
b中所有二進位制位個數 |
b[pos] |
訪問下標為pos位置的位值 |
b.test(pos) |
測試pos位置的二進位制位是否為 |
b.set() |
將b所有位置1 |
b.set(pos) |
將b中pos位置的位置1 |
b.reset() |
將b所有位置置0 |
b.reset(pos) |
將b中pos位置的位置0 |
b.flip() |
將b中所有位翻轉 |
b.flip(pos) |
將b中pos位置上的位翻轉 |
b.to_ulong() |
將b轉化為unsigned long值 |
os << b |
將b的位集合直接輸出到os流 |
注:
Ø b.cout和b.size()返回的是size_t型別,該型別定義在cstddef標頭檔案中(C標準標頭檔案stddef.h的C++版本)
Ø b[pos]可以作為左值,即可以用來改變pos位置的值