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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++语言基础 —— STL —— 容器与迭代器 —— bitset

發(fā)布時(shí)間:2025/3/17 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++语言基础 —— STL —— 容器与迭代器 —— bitset 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【概述】

bitset 位于 <bitset> 頭文件中,其是 STL 的一部分,準(zhǔn)確地說,bitset 是一個(gè)模板類而不是容器,其模板參數(shù)不是類型,而整型的數(shù)值,即:bitset <N>?

bitset 存儲(chǔ)的是二進(jìn)制位,與一個(gè) bool 型的數(shù)組相似,其每位只占一個(gè)字節(jié),極大的優(yōu)化了空間,使用 bitset 可以像使用數(shù)組一樣利用位。

【定義】

bitset 的定義為在定義時(shí)必須定義其大小,定義一個(gè)空 bitset 時(shí)所有值默認(rèn)為 0

bitset<8> bit1; bitset<8> bit2(8); bitset<8> bit3(string("01010101")); bitset<8> bit4(bit2);cout<<"bit1="<<bit1<<endl;//bit1=00000000 cout<<"bit2="<<bit2<<endl;//bit2=00001000 cout<<"bit3="<<bit3<<endl;//bit3=01010101 cout<<"bit4="<<bit4<<endl;//bit4=00001000

【運(yùn)算】

bitset 可以直接做位運(yùn)算

bitset<4> bit1(string("0101")); bitset<4> bit2(string("1110"));cout<<"(bit1&bit2)="<<(bit1&bit2)<<endl;//(bit1&bit2)=0100 cout<<"(bit1|bit2)="<<(bit1|bit2)<<endl;//(bit1|bit2)=1111 cout<<"(bit1^bit2)="<<(bit1^bit2)<<endl;//(bit1^bit2)=1011 cout<<"(~bit1)="<<(~bit1)<<endl;//(~bit1)=1010cout<<"(bit1&=bit2)="<<(bit1&=bit2)<<endl;//(bit1&=bit2)=0100 cout<<"(bit1|=bit2)="<<(bit1|=bit2)<<endl;//(bit1|=bit2)=1110 cout<<"(bit1^=bit2)="<<(bit1^=bit2)<<endl;//(bit1^=bit2)=0000 cout<<"(bit1<<=1)="<<(bit1<<=1)<<endl;//(bit1<<=1)=0000 cout<<"(bit1^=4)="<<(bit1^=4)<<endl;//(bit1^=4)=0100cout<<"(bit1==bit2)="<<(bit1==bit2)<<endl;//(bit1==bit2)=0 cout<<"(bit1!=bit2)="<<(bit1!=bit2)<<endl;//(bit1!=bit2)=1

【循環(huán)移位操作】

由于 bitset 沒有循環(huán)移位,所以可將循環(huán)移位進(jìn)行拆解,有:

  • 左移 k 位時(shí):先左移?k 位,再右移 m-k 位,最后兩者取或,即:(x<<k)|(x>>(m-k))
  • 右移 k 位時(shí):先右移 k 位,再左移 m-k 位,最后兩者取或,即:(x>>k)|(x<<(m-k))
bitset<N> left(bitset<N> &x,int val,int len) {//val為移動(dòng)位數(shù),len為bitset長度return (x<<val)|(x>>(len-val)); } bitset<N> right(bitset<N> &x,int val,int len) {val為移動(dòng)位數(shù),len為bitset長度return (x>>val)|(x<<(len-val)); }

【函數(shù)】

bitset 沒有迭代器,但其函數(shù)十分便捷

  • bit.size();//返回長度
  • bit.count();//返回1的個(gè)數(shù)
  • bit.any();//返回是否有1
  • bit.none();//返回是否沒有1
  • bit.set();//全部置為1
  • bit.set(p);//下標(biāo)從0開始,將p+1的位置為1
  • bit.set(p,n);//將p+1位置為n
  • bit.reset();//全部置為0
  • bit.reset(p);//將p+1位置為0
  • bit.flip();//全部取反等同于(~bit)
  • bit.flip(p);//將p+1位取反
  • bit.to_ulong();//返回轉(zhuǎn)換為unsignedlong的結(jié)果,超范圍會(huì)報(bào)錯(cuò)
  • bit.to_ullong();//返回轉(zhuǎn)換為unsignedlonglong的結(jié)果,超范圍報(bào)錯(cuò)
  • bit.to_string();//返回轉(zhuǎn)換為string的結(jié)果

總結(jié)

以上是生活随笔為你收集整理的C++语言基础 —— STL —— 容器与迭代器 —— bitset的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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