bitset粗略用法

发布时间 2023-07-21 09:36:04作者: N再再
  1. 赛中一直在想怎么找到两个点的公共点,没想到bitset还可以直接&一下在count一下直接出来了,抓紧研究下bitset
bitset可以近乎为只存 1, 0的数组,和普通数组相比时间复杂度优异。
普通数组count之类的数组要n的时间复杂度,bitset只要n/32. 空间也与字符型相同一个元素只占一个字节。
在数的意义上就是比较直观二进制串, 可以直接进行位运算。
头文件: #include<bitset>
bitset<N> bt1, bt2, bt; // 定义, N 为bitset长度。
位运算都可以用: 与、或、非、异或,左移,右移
bt1&bt2
bt1|bt2
~bt1
bt1^bt2
bt1<<=2
bt1>>=2
bt.size() 返回大小(位数)
bt.count() 返回1的个数
bt.any() 返回是否有1
bt.none() 返回是否没有1
bt.set() 全都变成1
bt.set(p) 将第p + 1位变成1
bt.set(p, x) 将第p + 1位变成x
bt.reset() 全都变成0
bt.reset(p) 将第p + 1位变成0
bt.flip() 全都取反
bt.flip(p) 将第p + 1位取反
bt.to_ulong() 返回它转换为unsigned long的结果,如果超出范围则报错
bt.to_ullong() 返回它转换为unsigned long long的结果,如果超出范围则报错
bt.to_string() 返回它转换为string的结果