一,bitset本质
bitset = 定长二进制数组(0/1)+ 位运算加速
类似:
bool a[N];
但
支持批量位运算(64位/128位并行)
二,定义 & 初始化
bitset<1000>b; //全0
bitset<1000>b("10101"); //字符串初始化(低位在左)
三,基础操作
1,访问 & 修改
b[i] //访问
b[i] = 1; //修改
2,清空 / 置1
b.reset(); //全0
b.set(); //全1
b.set(i); //第i位 = 1
b.reset(i); //第i位 = 0
3,取反
~b
b.flip(); //全部翻转
b.flip(i); //单点翻转
4,统计
b.count() // 1 的个数
b.any() // 是否有1
b.none() // 是否全0
b.all() // 是否全1
四,位运算
1,与(交集)
c = a & b;
2,或(并集)
c = a | b;
3,异或
c = a ^ b;
4,位移
b << k
b >> k
复杂度优势
普通做法:
O(n)
bitset:
O(n / 64)
注意事项
必须定长
bitset<n> //n必须是常量
下标必须从0开始
b[0] 是最低位