之前咱们介绍过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';//1010bs &= (bitset<4>(1) << 4);cout << bs << '\n';//1000

其余办法

bitset还有几个有用的办法:

  1. count():用于计算bitset中1的个数。
  2. any():如果bitset中有一个位是1,那么返回true,否则返回false。
  3. none ():如果bitset中每个位都是0,那么返回true,否则返回false。
  4. set ():用于将bitset中的所有地位设置成1。
  5. reset ():用于将bitset中的所有地位设置成0。
  6. flip ():用于将bitset中的所有地位反转。

和bool数组的区别

STL中的 bitset 是由固定长度的二进制位组成的数据类型,位数的范畴由模板参数确定,最多可示意2^[模板参数]个值;

bool 是c++用作布尔型的类型,只能示意真或假,两个类型之间惟一的不同就是:bitset 是变长度,bool 是定长度。这意味着对于 bool,每个值都须要占用8位,而bitset能够依据理论值须要而扭转长度,比方只有1位保留即可。

一般来说,bitsetbool更快,遍历的复杂度也能够从O(n)升高到O(n / w)w示意计算机位数。

总结

bitset能够用来优化程序,但因为其非凡的构造,操作它须要特地的留神。

以上就是bitset的基本操作办法,心愿能帮忙到大家。

本文由eriktse原创,创作不易,如果对您有帮忙,欢送小伙伴们点赞、珍藏⭐、留言