之前咱们介绍过 vector, queue, stack,map,set,明天咱们介绍另外一个 stl 容器:bitset。
🎈 作者:Eriktse
🎈 简介:19 岁,211 计算机在读,现役 ACM 银牌选手🏆力争以通俗易懂的形式解说算法!❤️欢送关注我,一起交换 C ++/Python 算法。(优质好文继续更新中……)🚀
🎈 集体博客:www.eriktse.com
本文仅从入门和实用角度进行解说,次要针对初学者或比赛向。如有不谨严的中央欢送斧正!
bitset 简介
bitset
是 C ++ 规范模板库 (STL) 中的一种数据结构,它以十进制数的模式存储 bit
(二进制位)的值。它的目标是包容在肯定的空间中存储和操作十分小的数字,因为常常只须要一位来示意某个值是true
还是false
。
bitset
能够存储大小可变的位,每一位存储一位数据,可用 true
, false
, 0
, 1
来示意,可能灵便的操作每一位。
bitset
提供一个十分无效的接口,用于在 bit
向量中疾速地实现检索和更新操作,是对内存和硬件资源的高效利用。
初始化
应用 bitset
须要引入头文件#include <bitset>
。
用以下代码初始化一个 bitset
变量。
bitset<4> bs;// 初始化一个大小为 4 的 bitset
bitset 即便初始化在栈空间(非全局变量)里,也会全副初始化为 0。
bitset 对象的构造函数要求参数为定义一个数字,这个数字就是你要应用的位的个数。例如,
bitset<4> bs;
这个 bitset<4> bs
定义一个 bitset
,它具备4
个二进制位,每个位都是0
。
bitset<4> bs(5);//0101
要定义一个 bitset 并为每个位设定初始值,能够把对应的 0 和 1 用字符串来写
bitset<10> bs2("1010101010");
用法
其实能够间接当做一个能够做位运算的 bool 数组用,它常常用于动静布局中。
批改
bs[0] = 1;
cout << bs << '\n';//0001
位运算
运算符个别能够分为两类:流运算符,例如 <<
和>>
;
bs <<= 1;
cout << bs << '\n';//0010
另一类是比拟、赋值运算符,例如 &
、|
、^
等等。
bs |= (bitset<4>(1) << 3);
cout << bs << '\n';//1010
bs &= (bitset<4>(1) << 4);
cout << bs << '\n';//1000
其余办法
bitset 还有几个有用的办法:
- count():用于计算 bitset 中 1 的个数。
- any():如果 bitset 中有一个位是 1,那么返回 true,否则返回 false。
- none ():如果 bitset 中每个位都是 0,那么返回 true,否则返回 false。
- set ():用于将 bitset 中的所有地位设置成 1。
- reset ():用于将 bitset 中的所有地位设置成 0。
- flip ():用于将 bitset 中的所有地位反转。
和 bool 数组的区别
STL 中的 bitset
是由固定长度的二进制位组成的数据类型,位数的范畴由模板参数确定,最多可示意 2^[模板参数]
个值;
bool
是 c ++ 用作布尔型的类型,只能示意真或假,两个类型之间惟一的不同就是:bitset
是变长度,bool
是定长度。这意味着对于 bool,每个值都须要占用 8
位,而 bitset
能够依据理论值须要而扭转长度,比方只有 1
位保留即可。
一般来说,bitset
比 bool
更快,遍历的复杂度也能够从 O(n)
升高到 O(n / w)
,w
示意计算机位数。
总结
bitset
能够用来优化程序,但因为其非凡的构造,操作它须要特地的留神。
以上就是 bitset
的基本操作办法,心愿能帮忙到大家。
🎈 本文由 eriktse 原创,创作不易,如果对您有帮忙,欢送小伙伴们点赞👍、珍藏⭐、留言💬