如何使用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、bit衡痕贤伎set 的各种内置函数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]=xb.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 的实现方法,它的效率十分之高,通常用来优化算法,为编程提供新的思路