Bitset 用法(STL)
std::bitset是STL的一個模板類,它的參數(shù)是整形的數(shù)值,使用位的方式和數(shù)組區(qū)別不大,相當(dāng)于只能存一個位的數(shù)組。下面看一個例子
[cpp]?view plaincopy?
結(jié)果是?? the set bits in bitset<5> b1(5) is:00000000000000000101
它是以整數(shù)5傳遞進(jìn)去,而以二進(jìn)制數(shù)打印出來。
?
bitset還可以用作字符串轉(zhuǎn)為整型
?
[cpp]?view plaincopy?
以及整形轉(zhuǎn)為字符串
?
[cpp]?view plaincopy?
?
在網(wǎng)上看到還有一篇關(guān)于bitset寫的不錯的文章,不知到作者是誰,粘貼自用之:
?
?
bitset如何初始化、如何轉(zhuǎn)化為double類型的小數(shù)、如何進(jìn)行交叉(可以嘗試用string作為中間量,因?yàn)閎itset可以用string初始化的,但是這樣的構(gòu)造和傳遞會消耗很多的時間——我討厭這種不必要的消耗!)
假如說我希望計算的精度足夠高,將bitset取為64位,那么什么類型的數(shù)才能輸出?如果不需要輸出,那么在取精度的時候,如何將一個64位的bitset轉(zhuǎn)化為double類型的小數(shù)?(可能需要自己編程實(shí)現(xiàn)了)
如何將一個double類型的數(shù)字轉(zhuǎn)化為bitset,也就是二進(jìn)制編碼,方便我們做交叉、變異。
(說得簡單點(diǎn),以上兩個就是解碼和編碼的問題)——文字很亂,整理一下!
如何實(shí)現(xiàn)兩個bitset的合并?小數(shù)部分、整數(shù)部分,如果能夠合并,那寫程序又會方便多了!比如:兩個32位的bitset合并成一個64位的bitset!(是不是又要利用string進(jìn)行轉(zhuǎn)換呢?如何轉(zhuǎn)換?)
代碼說明:將bitset的某一位置為1
bitset的函數(shù)用法
注意事項(xiàng)
你看得出來下面的代碼為什么輸出7和9嗎?
?
原因很簡單:bitset調(diào)用的構(gòu)造函數(shù),1111為十進(jìn)制,換成二進(jìn)制為 0x10001010111,最后4位為0111,輸出就是7;如果你想規(guī)定bitset里面的每一位,那么最好用string類 型:bitset<4> bits("1111"); 這樣輸出就是15了。
?
字符串合并以及輸出的問題,要搞定,還真麻煩......為了偷懶,在多個類型之間轉(zhuǎn)來轉(zhuǎn)去的......不過寫起來真的很簡單,哈哈!有現(xiàn)成的方法就用唄!不管效率了......
下面是2個bitset合并的代碼例子
?
?
bitset能夠達(dá)到的最大長度
?
?
想使用動態(tài)的bitset嗎?
dynamic_bitset可以滿足我的需求!這實(shí)在太棒了!boost萬歲!ps:不知道會造成 多大的效率影響?和固定長度的代碼比較起來,雖然固定一點(diǎn)、浪費(fèi)一點(diǎn)空間,但是如果更快的話,也是值得了。另外:dynamic_bitset不能在 vc6下通過編譯......
bit_vector
這個“位向量組”在SGI STL中實(shí)現(xiàn),VC6中沒有。從名字和功能介紹上就可以看出來:這是一個可以像操作vector一樣方便的容器,可以push_back每一位。效率有待實(shí)驗(yàn),我是在一本書上偶然看到這個庫的。
然而,令我失望的是:在ubuntu和VC6下,都沒有bit_vector,必須安裝SGI 版本的stl才行呢。
?
結(jié)論:對于這方面,看樣子還是湊合著用吧!(實(shí)現(xiàn)簡單的bitset,空間方面嘛,稍微浪費(fèi)一點(diǎn)也就是了。
轉(zhuǎn)載于:https://www.cnblogs.com/zxhl/p/4709572.html
總結(jié)
以上是生活随笔為你收集整理的Bitset 用法(STL)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 增加 addDataScheme(fil
- 下一篇: HDU 2255 二分图最佳匹配 模板题