Loading

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\) 出现的位置,如果没有返回数组大小。

习题

不想写...

posted @ 2024-08-08 20:10  Fire_Raku  阅读(10)  评论(0编辑  收藏  举报