終於又來寫博客了 ==
bitset存儲的是二進數位,就和一個bool性數組差不多。用法上和數組的操作方式也差不多。
每位只占一個字節,大大優化了空間,可以通過數組形式訪問。
bitset定義
可以用以下幾種方式定義bitset,值得注意的是,bitset在定義的時候必須定義大小,這里8便是我們定義的長度,定義一個空bitset時所有值默認為0;
1 bitset<8> b; 2 bitset<8> bit(8); 3 bitset<8> tp1(string("01010101")); 4 bitset<8> tp2(bit); 5 6 cout << " b = " << b << endl; 7 cout << "bit = " << bit << endl; 8 cout << "tp1 = " << tp1 << endl; 9 cout << "tp2 = " << tp2 << endl;
上面代碼的輸出結果為
1 b = 00000000 2 bit = 00001000 3 tp1 = 01010101 4 tp2 = 00001000
bitset的運算
猜都能猜到bitset肯定是支持位運算的,是的bitset可以直接做位運算
1 bitset<4> tp1(string("0101")); 2 bitset<4> tp2(string("1110")); 3 4 cout << "(tp1 & tp2) = " << (tp1 & tp2) << endl; 5 cout << "(tp1 | tp2) = " << (tp1 | tp2) << endl; 6 cout << "(tp1 ^ tp2) = " << (tp1 ^ tp2) << endl; 7 cout << "(~tp1) = " << (~tp1) << endl; 8 9 cout << "(tp1 &= tp2) = " << (tp1 &= tp2) << endl; 10 cout << "(tp1 |= tp2) = " << (tp1 |= tp2) << endl; 11 cout << "(tp1 ^= tp2) = " << (tp1 ^= tp2) << endl; 12 13 cout << "(tp1 <<= 1) = " << (tp1 <<= 1) << endl; 14 cout << "(tp1 ^= tp) = " << (tp1 ^= 4) << endl; 15 16 cout << "(tp1 == tp2) = " << (tp1 == tp2) << endl; 17 cout << "(tp1 != tp2) = " << (tp1 != tp2) << endl;
這就沒什么好說的了,運行結果為
1 (tp1 & tp2) = 0100 2 (tp1 | tp2) = 1111 3 (tp1 ^ tp2) = 1011 4 (~tp1) = 1010 5 (tp1 &= tp2) = 0100 6 (tp1 |= tp2) = 1110 7 (tp1 ^= tp2) = 0000 8 (tp1 <<= 1) = 0000 9 (tp1 ^= tp) = 0100 10 (tp1 == tp2) = 0 11 (tp1 != tp2) = 1
bitset的函數
既然也是STL的東西,肯定會封裝了一下函數,bitset是沒有迭代器的。
常用函數有
1 bit.size(); //返回大小(長度) 2 bit.count(); //返回1的個數 3 bit.any(); //返回是否有1 4 bit.none(); //返回是否沒有1 5 bit.set(); //全部置為1 6 bit.set(p); //將p+1(下標從0開始!!)位置為1 7 bit.set(p,n); //將p+1位置為n 8 bit.reset(); //全部置為0 9 bit.reset(p); //將p+1位置為0 10 bit.flip(); //全部取反 等同於 (~bit) 11 bit.flip(p); //將p+1位取反 12 bit.to_ulong(); //返回轉換為 unsigned long 的結果,超范圍會報錯 13 bit.to_ullong();//返回轉換為 unsigned long long 的結果,超范圍報錯 14 bit.to_string();//返回轉換為 string 的結果
當題目涉及到位運算時,就可以使用bitset快速的在整形,string,二進制三種類型中完成操作轉換。並且可以在某些數據結構中直接套用bitset完成二進制的對位操作。還有就是bitset很好用。完XD
STL的容器基本講的差不多了。熟練掌握STL好處我也就不多說了= = ,自己在做題的過程中慢慢琢磨熟練吧。