1. 程式人生 > >bitset容器用法(附例題)

bitset容器用法(附例題)

什麼是bitset

bitset 是STL庫中的二進位制容器;

bitset就像一個bool型別的陣列一樣,但是有空間優化——bitset中的一個元素一般只佔1 bit,相當於一個char元素所佔空間的八分之一;

bitset有一個特性:整數型別和布林陣列都能轉化成bitset;

bitset中的每個元素都能單獨被訪問,例如對於一個叫做foo的bitset,表示式foo[3]訪問了它的第4個元素,就像陣列一樣;

bitset的大小在編譯時就需要確定。如果你想要不確定長度的bitset,請使用(奇葩的)vector<bool>

使用方法

初始化bitset物件的方法

bitset<n> b;

bn位,每位都為0

bitset<nb(u);

bunsigned longu的一個副本

bitset<nb(s);

bstring物件s中含有的位串的副本

bitset<nb(sposn);

bs中從位置pos開始的n個位的副本

例:

bitset<5> bi;

這樣就初始化了一個長度為5的變數名為bi的bitset。

賦值

bitset過載了[]運算子,故可以像bool陣列那樣賦值

bi[2] = 1;

這樣就能把第三位賦值為1;

注意

bitset 高位在左,低位在右,使用時需注意。如下表

bi[4]bi[3]bi[2]bi[1]bi[0]
00100

常用函式

b.any()      b中是否存在置為1的二進位制位?
b.none()     b中不存在置為1的二進位制位嗎?
b.count()    b中置為1的二進位制位的個數
b.size()     b中二進位制位數的個數
b[pos]       訪問b中在pos處二進位制位
b.test(pos)  b中在pos處的二進位制位置為1麼?
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
os << b      把b中的位集輸出到os流

參考資料:《C++ Primer》