STL中bitset的用法


終於又來寫博客了 ==

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好處我也就不多說了= = ,自己在做題的過程中慢慢琢磨熟練吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM