多语言展示
当前在线:1367今日阅读:23今日分享:25

如何使用C++STL中的bitset

bitset,C++STL的容器之一,每8位占用1字节,效率较高,是用来优化算法的好帮手那么,我们该如何使用 bitset 呢?
工具/原料
1

电脑

2

C++编译器

方法/步骤
1

如何声明一个 bitset?bitset name;其中,size 应是一个数值常量,代表这个 bitset 的位数,例如bitset <1000> b; 就声明了一个叫做“b”的 1000 位的 bitset还要在头文件中加上 '#include'

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]=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<(y); 输出x转化为二进制后的数,一共y位,不足补0,高位舍去

9

以上就是 bitset 的主要使用方法,由于 bitset 的实现方法,它的效率十分之高,通常用来优化算法,为编程提供新的思路

注意事项
1

所有STL容器都是左闭右开,bitset 也不例外,随机访问时千万别越界!

2

如果这篇经验帮到了您,就请投票+收藏吧,谢谢!

推荐信息