一、bitset

bitset 是 C++ 标准库 <bitset> 中的一个模板类,用于表示和操作固定大小的二进制位序列(bit sequence)。它本质上是一个大小不可变的、高效的位数组,专门用于处理二进制位操作(严格意义上不属于 STL),相比于手动使用整数或数组来操作位,bitset 提供了更简洁、高效且安全的接口。

特点:

  • 固定大小:在定义时必须指定位数 NN,如 bitset<32> 表示 32 位。
  • 高效存储:每个位只占用 1 bit(而非 1 byte),内存使用非常紧凑。
  • 适用于需要高效处理二进制、状态压缩等场景。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <bits/stdc++.h>
using namespace std;

int main() {
bitset<8> b1;//定义 bitset 长度为 8,默认都是 0
cout << b1 << endl;

bitset<8> b2(5);//用整数 5 的二进制初始化 8 位的 bitset
cout << b2 << endl;// 0000 0101

bitset<8> b3("1010");//利用字符串初始化
cout << b3 << endl;

bitset<4> b4(20);//初始化时不够位数补 0,超出位数截断
cout << b4 << endl;//0100(10100 截断)
}

bitset 常见函数:

操作方式 说明
b[i] 访问第 ii 位(从 0 开始)
b.test(i) 检查第 ii 位是否为 1
b.set(i) 把第 ii 位设为 1
b.set() 全部设为 1
b.reset(i) 把第 ii 位设为 0
b.reset() 全部设为 0
b.flip(i) 把第 ii 位取反
b.flip() 所有位取反
b.count() 返回有多少个 1
b.any() 是否至少有一个 1
b.none() 是否全是 0

T1 集合操作

题目描述