1. 程式人生 > >C++ Primer學習筆記- 第三章:標準庫型別之四

C++ Primer學習筆記- 第三章:標準庫型別之四

四、標準庫bitset型別

標準庫中bitset型別用來處理二進位制位的有序集,bitset型別簡化了位集的處理,使用bitset時需要包含標頭檔案#include<bitset>

    bitset物件的定義和初始化

bitset也是類模板,不過bitset型別物件之間的區別在於長度而不是型別,因此bitset模板的引數是長度型別

初始化方法

說明

bitset<n> b;

bn位,每位都為0

bitset<n> b(u);

bunsigned longu的一個副本

bitset<n> b(s);

bstring物件

s中含有的位串的副本,s是01串

bitset<n> b(s, pos, n);

bs中從位置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位置的二進位制位是否為

1

b.set()

b所有位置1

b.set(pos)

bpos位置的位置1

b.reset()

b所有位置置0

b.reset(pos)

bpos位置的位置0

b.flip()

b中所有位翻轉

b.flip(pos)

bpos位置上的位翻轉

b.to_ulong()

b轉化為unsigned long

os << b

b的位集合直接輸出到os

注:

Ø b.coutb.size()返回的是size_t型別,該型別定義在cstddef標頭檔案中(C標準標頭檔案stddef.hC++版本)

Ø b[pos]可以作為左值,即可以用來改變pos位置的值