STL——bitset的使用方法

发布时间 2023-09-09 08:51:15作者: sunzz3183

bitset

介绍

类似 \(bool\) 数组一样的东西,储存的是二进制,但是每一位只占 \(1bit\),可以优化你算法的时间和空间复杂度。

储存

开一个bitset为:

bitset<100>bs;

最左边为最低位(即第 \(0\) 位),最右边为最高位。

在初始化的时候,是从最低位开始储存。

初始化

有两种初始化

  1. 整数
bitset<10>bs(657);//(625)_10=(1010010001)_2
  1. 字符串(string)
bitset<10>bs("1010010001");

储存的都是

1000100101

注意:如果在这个里面,bitset 开了更高的位数,则会在之后添加后缀 \(0\) (也就是二进制)。

举个例子,如果

bitset<11>bs(657);

储存的是

10001001010

输出

bitset<10>bs("1010010001");
signed main(){
    cout<<bs<<"\n";//直接输出
    printf("%d",bs);//转整形输出,注意bitset返回为int,所以位数最大开到64
    return 0;
}

输出为

1010010001
657

注意:cout输出时是从最高位向最低为输出(也是二进制)

输入

bitset<10>bs;
signed main(){
    cin>>bs;
    scanf("%d",&bs);
    return 0;
}

单个位

  1. 强转
(bool)bs[2]
  1. \(test\)函数
bs.test(s)//是否是1

\(test\) 更快一点。

位运算

bitset支持所有位运算

允许 ~,&,|,^,<<,>>

函数

bs.size()      返回大小(位数)
bs.count()     返回1的个数
bs.any()       返回是否有1
bs.none()      返回是否没有1
bs.any()       返回是否全部为1
bs.set()       全都变成1
bs.set(p)      将第p位变成1(注意:bitset是从第0位开始的) 
bs.set(p, x)   将第p位变成x
bs.reset()     全都变成0
bs.reset(p)    将第p位变成0
bs.flip()      全都取反
bs.flip(p)     将第p位取反
bs.to_ulong()  返回它转换为unsigned long的结果,如果超出范围则报错
bs.to_ullong() 返回它转换为unsigned long long的结果,如果超出范围则报错
bs.to_string() 返回它转换为string的结果
bs._Find_first() 返回它从小到大第一个为 1 的位数
bs._Find_next(x) 返回第x位之后(不包括x)它从小到大第一个为 1 的位数

完结撒花!