STL之bitset

简介

b i t s e t bitset bitset说白了就是 01 01 01数组,或者说是 01 01 01字符串,然后赋予了整体的一些位运算等操作。

b i t s e t bitset bitset是以位为单位存的,空间复杂度较低, b i t s e t bitset bitset的操作都可以看做是常数时间复杂度,经常用于优化代码。

构造函数

无参构造。

bitset<32> b;

传入 i n t int int参数,将该数的二进制保存在 b i t s e t bitset bitset中。

bitset<32> b(16);

传入 01 01 01字符串构造。

string s1="1001010";
char s2[]="10011101";

biset<32> b1(s1);
biset<32> b2(s2);

PS:带参构造多出的长度前面用0补充,少的长度取后面部分

支持运算

b i t s e t bitset bitset肯定支持位运算。

bitset<8> b1("10101101");
bitset<8> b2("11100100");
bitset<8> b3;

b3=b1&b2;

b3=b1|b2;

b3=b1^b2;

b3=~b1;

b3=b1<<2;

b3=b2>>2;

类似数组和字符串,可以使用 [    ] [~~] [  ]取得任意位。

注意从右向左依次是 [ 0 , s − 1 ] [0,s-1] [0,s1]位,这一点和数组字符串不同。

bitset<8> b("11101101");

cout<<b[2]<<endl; //0
常用函数

s i z e ( ) size() size():求 b i t s e t bitset bitset的大小。

bitset<8> b("10101101");

cout<<b.size()<<endl;  //8

c o u n t ( ) count() count():统计 b i s t e t bistet bistet 1 1 1的个数。

bitset<8> b("10101101");

cout<<b.count()<<endl; //5

t o _ s t r i n g ( ) to\_string() to_string():将 b i t s e t bitset bitset转化为 s t r i n g string string类型。

t o _ u l o n g ( ) to\_ulong() to_ulong():将 b i t s e t bitset bitset转化为 u n s i g n e d    l o n g unsigned~~long unsigned  long类型。

t o _ u l l o n g ( ) to\_ullong() to_ullong():将 b i t s e t bitset bitset转化为 u n s i g n e d    l o n g    l o n g unsigned~~long~~long unsigned  long  long类型。

bitset<4> b("1111");

cout<<b.to_string()<<endl; //1111

cout<<b.to_ulong()<<endl; //15

cout<<b.to_ullong()<<endl; //15

f l i p ( v o i d ) flip(void) flip(void) f l i p ( i n t ) flip(int) flip(int):不传入参数将所有位取反,传入参数只将参数位取反。

bitset<8> b("10101101");

cout<<b.flip()<<endl; //01010010

cout<<b.filp(0)<<endl; //10101100

s e t ( ) set() set():将参数每一位置为 1 1 1

r e s e t ( ) reset() reset():将参数每一位置为 0 0 0

bitset<8> b;

b.set(); //11111111

b.reset(); //00000000

_ F i n d _ f i r s t ( ) \_Find\_first() _Find_first():从低位到高位找下一个含有 1 1 1的位置。

_ F i n d _ n e x t ( p o s ) \_Find\_next(pos) _Find_next(pos):找当前位置的下一个 1 1 1的位置。

bitset<10> b("01001100");

b._Find_first();  //3

b._Find_next(4);  //7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值