现在开始天晴了!|

sunzz3183

园龄:5年2个月粉丝:10关注:25

STL——bitset的使用方法

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.all()       返回是否全部为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 的位数

完结撒花!

本文作者:sunzz3183

本文链接:https://www.cnblogs.com/sunzz3183/p/17688881.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   sunzz3183  阅读(55)  评论(0编辑  收藏  举报
Live2D
欢迎阅读『STL——bitset的使用方法』
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起