C++:STL------bitset

C++:STL------bitset

1.about

bitset可看作一个多位二进制数,每8位占用1个字节,相当于采用了状态压缩的二进制数组,并支持基本的位运算。

在估算程序运行的时间时,一般以32位整数的运算次数为基准,因此n位 bitset 执行一次位运算的复杂度可视为n/32,效率较高。

2.声明和初始化

#include <bitset>				//头文件
bitset<10000> b;				//表示一个10000位二进制数,<>中填写位数。

bitset<n> b;	          		//b有n位,每位都为0
bitset<n> b(u);	          		//b是unsigned long型u的一个副本
bitset<n> b(s);	          		//b是string对象s中含有的位串的副本
bitset<n> b(s, pos, n);	  		//b是s中从位置pos开始的n个位的副本

3.位运算操作符

~b:返回对bitset b按位取反的结果。

&, |, ^:返回对两个位数相同的bitset执行按位与、或、异或运算的结果。

>>, <<:返回把一个bitset右移、左移若干位的结果。

==, !=:比较两个bitset代表的二进制数是否相等。

4.[ ]操作符

**b[k]**表示b的第k位,既可以取值,也可以赋值。

在10000位二进制数中,最低位为 b[0] ,最高位为 b[9999] 。

5.method

方法描述实例时间复杂度
sizebitset 的长度int x = b.size();O(1)
count返回有多少位为1int y = b.count();O(n/w),w一般为64注
any若所有位都为0,返回false; 若s至少一位为1,返回truebool a = b.any();O(n/w),w一般为64
none若所有位都为0,返回true; 若s至少一位为1,返回falsebbool c = b.none();O(n/w),w一般为64
set把所有位变为1; 把第k位改为v,即 b[k] = vb.set(); b.set(k,v);O(1)
reset把所有位变为0; 把第k位改为0,即 b[k] = 0b.reset(); b.reset(k);O(1)
flip把所有位取反,即 s = ~s; 把第k位取反,即 b[k]^=1b.flip(); b.flip(k);O(1)

注:bitset的count操作的复杂度未在C++ Reference 中标注。一般来说,其复杂度为关于bitset位数的线性复杂度,但实际效率可能稍快一些。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值