日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Bitset 用法(STL)

發(fā)布時間:2024/1/17 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Bitset 用法(STL) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

std::bitset是STL的一個模板類,它的參數(shù)是整形的數(shù)值,使用位的方式和數(shù)組區(qū)別不大,相當(dāng)于只能存一個位的數(shù)組。下面看一個例子

[cpp]?view plaincopy
  • bitset<20>?b1(5);??
  • ??cout<<"the?set?bits?in?bitset<5>?b1(5)?is:"??
  • ????<<?b1?<<endl;???
  • ?

    結(jié)果是?? the set bits in bitset<5> b1(5) is:00000000000000000101

    它是以整數(shù)5傳遞進(jìn)去,而以二進(jìn)制數(shù)打印出來。

    ?

    bitset還可以用作字符串轉(zhuǎn)為整型

    ?

    [cpp]?view plaincopy
  • string?bitval2;??
  • ??cin>>bitval2;???
  • //??int?length?=?strlen("11101101100");??
  • //?bitset<11>b2(bitval2);??
  • ???bitset<11>?b2(bitval2);??
  • ??cout<<b2<<"is??"<<b2.to_ulong()<<endl;??
  • ?

    以及整形轉(zhuǎn)為字符串

    ?

    [cpp]?view plaincopy
  • int?interge1;??
  • cin>>interge1;??
  • ??
  • cout<<"************整數(shù)轉(zhuǎn)為字符串**************"<<endl;??
  • bitset<11>b3(interge1);??
  • cout<<b3.to_ulong()<<"is??"<<b3.to_string()<<endl;??
  • ?

    ?

    在網(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<32>?bits;
  • for??(?int??i?=0;i<5;i++)
  • bits.?set?(i);?//i為需要被置為1的位數(shù)
  • cout<<bits<<endl;
  • bitset的函數(shù)用法

    注意事項(xiàng)

    你看得出來下面的代碼為什么輸出7和9嗎?

    ?

  • #include<iostream>?
  • #include<bitset>?
  • using???namespace??std;?
  • void??main()?
  • {?
  • ????bitset<4>?bit(1111);?
  • ????cout<<bit.to_ulong()<<endl;?
  • ????bitset<4>?ait(1001);?
  • ????cout<<ait.to_ulong()<<endl;?
  • }
  • 原因很簡單: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)成的方法就用唄!不管效率了......

  • #include?<iostream>
  • #include?<string>
  • #include?<iostream>
  • #include?"afxwin.h"
  • using???namespace??std;
  • int??main(){
  • ????CString?s1?=??"abcd"?;
  • ????CString?s2?=??"xyzw"?;
  • ????CString?s3?=?s1+s2;
  • ????cout<<(LPCTSTR)s1<<endl<<(LPCTSTR)s3<<endl;
  • ?????string??s4?=?(LPCTSTR)s3;
  • ????cout<<s4<<endl;
  • ?????return??0;
  • }
  • 下面是2個bitset合并的代碼例子

    ?

    ?

  • #include?<bitset>
  • #include?<iostream>
  • #include?<string>
  • #include?<iostream>
  • #include?"afxwin.h"
  • using???namespace??std;
  • int??main(){
  • ????bitset<4>?bits1(?"1111"?);
  • ????bitset<4>?bits2(?"0000"?);
  • ?????int??i?=?bits1.size()+bits2.size();
  • //??bitset<i>?bits3;???//不能使用動態(tài)參數(shù)作為模板參數(shù),能不能想辦法解決?
  • ????bitset<128>?bits3;
  • ?????int??j=0;
  • ?????for??(j=0;j<bits1.size();j++)
  • ????{
  • ?????????if??(bits1[j]==1)
  • ????????????bits3.?set?(j);
  • ????}
  • ?????for??(j=bits1.size();j<bits1.size()+bits2.size();j++)
  • ????{
  • ?????????if??(bits2[j-bits1.size()]==1)
  • ????????{
  • ????????????bits3.?set?(j);
  • ????????}
  • ????}
  • ????cout<<bits3<<endl<<bits3.to_ulong()<<endl;
  • ?????return??0;
  • }
  • bitset能夠達(dá)到的最大長度

    ?

    ?

  • #include?<bitset>
  • #include?<vector>
  • #include?<iostream>
  • #include?<string>
  • #include?<iostream>
  • #include?"afxwin.h"
  • using???namespace??std;
  • int??main(){
  • ????bitset<1000000>?bits;// 一百萬差不多到頂了,如果再加一個0,到達(dá)一千萬,就會崩潰。為什么?
  • ????cout<<bits[0];
  • ?????return??0;
  • }
  • 想使用動態(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 中国一级免费毛片 | 人妻巨大乳一二三区 | 蜜桃av噜噜一区二区三区网址 | 91网站在线看 | 欧美一区二| 日韩黄视频 | 波多野结衣中文字幕一区二区三区 | 69视频在线观看免费 | 一个色综合网站 | 成人拍拍 | 1024金沙人妻一区二区三区 | 午夜精品久久久久久久久久久久 | 天天草夜夜操 | 天天综合在线观看 | 国产精品伦一区二区三级视频 | 狠狠爱夜夜操 | 综合网五月天 | 香蕉视频1024 | 欧美黄色录像 | 91成人在线观看喷潮 | 4438五月天 | 亚州av在线 | 黄色av网址在线 | 国产精品久久久久久中文字 | 色图社区| 国内自拍偷拍 | 久久sese| 精品无码一区二区三区爱欲 | 欧美在线播放一区二区 | 欧美国产三级 | 国产免费av一区二区 | 国产在线拍揄自揄拍 | 欧美精品一区二区三区久久久竹菊 | 精品国产乱码久久久 | 一区二区视频播放 | 三级影片在线播放 | 性欧美视频在线观看 | 伊人影院中文字幕 | 国产乱妇无码大片在线观看 | 91激情| 澳门av网站 | 欧美精品1 | 一区二区三区视频网站 | 熟女高潮一区二区三区 | 香蕉视频在线免费 | aa片在线观看视频在线播放 | 成人亚洲免费 | 夜夜躁很很躁日日躁麻豆 | 99久久精品免费看国产免费软件 | 四虎影视在线播放 | 国产午夜精品免费一区二区三区视频 | 亚洲自拍偷拍一区 | 免费午夜激情 | 一级片一区二区三区 | 五月开心播播网 | 先锋影音av资源网站 | 伊人久久香 | 精品一区久久久 | 欧美精品一 | 天堂中文字幕免费一区 | 一级精品视频 | 手机免费在线观看av | www.久久网 | 成人精品国产 | 日本美女一级视频 | 99er这里只有精品 | 色综合久久久久无码专区 | 日本高清视频免费观看 | 精品日韩在线 | 国产精品777 | 羞羞成人 | 日日爽夜夜 | videos亚洲 | 欧美黑粗硬| 公车乳尖揉捏酥软呻吟 | 亚洲一线在线观看 | 四季av一区二区三区免费观看 | 黄色av影视 | 日韩中文字| 欧美日韩一区二区三区不卡视频 | 天堂国产一区二区三区 | 操小妹影院 | 国产女18毛片多18精品 | 欧美日韩亚洲综合 | 欧美日韩有码 | aaaa黄色 | 91字幕网 | 日韩激情综合网 | 国产丰满农村老妇女乱 | 日韩精品一区二区三区在线视频 | 日韩影视一区 | 欧美亚洲日本一区 | 久久中文字幕人妻 | 精品久久久久久久久久久久久久久久 | 成人综合激情网 | 国产理论视频在线观看 | 免费看黄色大片 | 玖玖国产 | 亚洲天堂中文在线 |