bitset容器用法(附例題)
阿新 • • 發佈:2018-12-31
什麼是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; | b有n位,每位都為0 |
bitset<n> b(u); | b是unsigned long型u的一個副本 |
bitset<n> b(s); | b是string物件s中含有的位串的副本 |
bitset<n> b(s, pos, n); | b是s中從位置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] |
0 | 0 | 1 | 0 | 0 |
常用函式
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》