bitset 学习笔记
bitset 有点厉害,必须要学了。
介绍
bitset 可以看成是一个每个位置都是 \(0\) 或 \(1\) 的 bool 数组。与 bool 数组相比,它的空间复杂度是其 \(\frac{1}{32}\),时间复杂度也是 \(\frac{1}{32}\),还支持位运算,所以不论是用处还是效率基本薄纱了 bool 数组。
可以作为卡常、压位操作、记录状态时使用。
1. 使用方法
std::bitset<N> a; //开一个长度为 N 的一维 bitset
a |= (1 << i); //可以单独作为一个数进行位运算
if(a[i]) //也可以作为数组直接访问下标
2 内置函数
复杂度 \(O(1)\) 的函数:
a.set()
:全部赋值为 \(1\)。
a.set(x)
:把指定第 \(x\) 位赋值为 \(1\)。
a.reset()
:全部赋值为 \(1\)。
a.reset(x)
:把指定第 \(x\) 位赋值为 \(0\)。
a.flip()
:全部位置取反。
a.flip(x)
:把指定第 \(x\) 位取反。
复杂度 \(O(\frac{n}{w})\) 的函数:
a.any()
判断数组中是否有 \(1\)。
a.count()
数组中 \(1\) 的个数。
a._Find_first()
:查找从下标 \(0\) 开始第一个 \(1\) 出现的位置,如果没有返回数组大小。
a._Find_next(x)
:查找从下标 \(x+1\) 开始第一个 \(1\) 出现的位置,如果没有返回数组大小。
习题
不想写...