如何使用C++STL中的bitset
1、如何声明一个 bitset?
bitset <size> name;
其中,size 应是一个数值常量,代表这个 bitset 的位数,例如
bitset <1000> b; 就声明了一个叫做“b”的 1000 位的 bitset
还要在头文件中加上 "#include<bitset>"
2、bitset 每一位中存储的数值为 0 或 1,初始值为 0,因此,bitset 可以看做是一个极大的二进制数
由于它每 8 位才占用 1 字节,所以 n 位 bitset 执行级倘一次位运算的时间复杂度约为 O(n/32),效率十分可观
该图片来自于网络
3、bitset 的各种内置函数
1. "[]" 随机访问操作符
因为 bitset 是一个左闭右开的容器,所以一个 n 位的 bitset 合法访问下标范围为 0~n-1,即一个 100000 位的 bitset 最高可以访问到 99999
当然,随机访问也可以赋值,但只能为 0/1
4、2. set()/reset()/flip()
将该 bitset 所有位赋为1/所有位赋为0/所有位取反(即0变为1,1变为0)
5、3. set(k,x)/reset(x)/flip(x)
将该 bitset 第k位赋为x/第x位赋为0/第x位取反
b.reset(x) 等价于 b[x]=0 等价于 b.set(x,0)
b.set(k,x) 等价于 b[k]=x
b.flip(x) 等价于 b[x]=~b[x]
6、4. count()
返回该 bitset 有多少位为 1
7、5. any()/none()
判断该 bitset 是否至少有 1 位为 1 /全部为 0
可以说,这两个函数正好相反,如果 any() 为 true,销屈醒则 none() 为 false
8、bitset 还有一个使用的小技巧,它可以很方追哨便地帮我们将十进制数转化为二进制数
cout<<bitset<x>(y); 输出x转化为二进制后的数,一共y位,不足补0,高位舍去
9、以上就是 bitset 的主要使用方法,由于 bitset 的实现方法,它的效率十分之高,通常用来优化算法,为编程提供新的思路