C++Primer_Chap17_標準庫特殊設施_List02_bitset型別_筆記
阿新 • • 發佈:2018-11-11
定義在標頭檔案bitset中的bitset類使位運算的使用更為容器,並且能夠處理超過最長整型型別大小的位集合。
#include <bitset>
定義和初始化bitset
當我們定義一個bitset時,需要宣告它包含多少個二進位制位。
bitset<32> bitvec(1U); //32位;低位為1,其他位為0
二進位制位的位置是從0開始編號的。因此,bitvec包含編號從0到31的32個二進位制位。編號從0開始的二進位制位被稱為低位(low-order),編號到31結束的二進位制位被稱為高位(high-order)
bitset<n> b; | b有n位;每一位均為0.此建構函式是一個constexpr |
bitset<n> b(u); | b是unsigned long long值u的低n位的拷貝。如果n大於unsigned long long的大小,則b中超出unsigned long long的高位被置為0。如果n小於unsigned long long的二進位制位數,則丟棄超出bitset大小的高位。此建構函式是一個constexpr |
bitset<n> b(s, pos, m, zero, one); | b是string s從位置pos開始m個字元的拷貝。s只能保護字元zero和one;如果s包含任何其他字元,建構函式會丟擲invalid_argument異常。字元在b中分別儲存為zero和one。pos預設為0,m預設為string::npos,zero預設為'0',one預設為'1' |
bitset<n> b(cp, pos, m, zero, one); | 與上一個建構函式相同,但從cp指向的字元陣列中拷貝字元。如果未提供m,則cp必須指向一個C風格字串。如果提供了m,則從cp開始必須至少有m個zero或one字元 |
接受一個string或一個字元指標的建構函式是explicit的。 |
bitset<13> bitvec1(0xBEEF); //1 1110 1110 1111
bitset<20> bitvec2(0xbeef); //0000 1011 1110 1110 1111
bitset<128> bitvec3(~0ULL); //0~63:1 64~127:0
bit<32> bitvec4("1100"); //1100
string的下標編號習慣和bitset恰好相反:string中下標最大的元素(最右字元)初始化bitset中的低位。
bitset操作
b.any() | b中是否存在置位的二進位制位 |
b.all() | b中所有位置都置位了麼 |
b.none() | b中不存在置位的二進位制位麼 |
b.count() | b中置位的位數 |
b.size() | 一個constexpr函式,返回b中的位數 |
b.test(pos) | 若pos位置的位是置位的,返回true,否則返回false |
b.set(pos, v) b.set() |
將位置pos處的位設定為bool值的v。v預設為true。 如果未傳遞實參,則將b中所有位置置位1 |
b.reset(pos) b.reset() |
將位置pos處的位復位0 將b中所有位復位0 |
b.flip(pos) b.flip() |
改變位置pos處的位的狀態 改變b中每一位的狀態 |
b[pos] | 訪問b中位置pos處的位;如果b是const的,則該位為1時b[pos]返回一個bool值true,否則返回false |
b.to_ulong() b.to_ullong() |
返回一個unsigned long或一個unsigned long long的值,其位模式與b相同。如果b中位模式不能放入指定的結果型別,則丟擲一個overflow_error異常 |
b.to_string(zero,one) | 返回一個string,表示b中的位模式。zero和one的預設值分別是0和1,用來表示b中的0和1 |
os << b | 將b中二進位制位列印為字元1或0,列印到流os中 |
is >> b | 從is讀取字元存入b。當下一個字元不是1或0時,或是已經讀入b.size()個位時,讀取過程停止。 |