C++语言基础 —— STL —— 容器与迭代器 —— bitset
生活随笔
收集整理的這篇文章主要介紹了
C++语言基础 —— STL —— 容器与迭代器 —— bitset
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【概述】
bitset 位于 <bitset> 頭文件中,其是 STL 的一部分,準確地說,bitset 是一個模板類而不是容器,其模板參數不是類型,而整型的數值,即:bitset <N>?
bitset 存儲的是二進制位,與一個 bool 型的數組相似,其每位只占一個字節,極大的優化了空間,使用 bitset 可以像使用數組一樣利用位。
【定義】
bitset 的定義為在定義時必須定義其大小,定義一個空 bitset 時所有值默認為 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【運算】
bitset 可以直接做位運算
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【循環移位操作】
由于 bitset 沒有循環移位,所以可將循環移位進行拆解,有:
- 左移 k 位時:先左移?k 位,再右移 m-k 位,最后兩者取或,即:(x<<k)|(x>>(m-k))
- 右移 k 位時:先右移 k 位,再左移 m-k 位,最后兩者取或,即:(x>>k)|(x<<(m-k))
【函數】
bitset 沒有迭代器,但其函數十分便捷
- bit.size();//返回長度
- bit.count();//返回1的個數
- bit.any();//返回是否有1
- bit.none();//返回是否沒有1
- bit.set();//全部置為1
- bit.set(p);//下標從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();//返回轉換為unsignedlong的結果,超范圍會報錯
- bit.to_ullong();//返回轉換為unsignedlonglong的結果,超范圍報錯
- bit.to_string();//返回轉換為string的結果
總結
以上是生活随笔為你收集整理的C++语言基础 —— STL —— 容器与迭代器 —— bitset的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吉哥系列故事――完美队形II(HDU-4
- 下一篇: 图论 —— 网络流 —— 最大流 ——