标准库 bitset

有些程序要处理二进制位的有序集,每个位可能包含 0(关)1(开)值。位是用来保存一组项或条件的 yes/no 信息(有时也称标志)的简洁方法。标准库提供的 bitset类简化了位集的处理。要使用 bitset 类就必须包含相关的头文件。


类似于 vectorbitset 类是一种类模板;而与 vector 不一样的是 bitset 类型对象的区别仅在其长度而不在其类型。在定义 bitset 时,要明确 bitset 含有多少位,须在尖括号内给出它的长度值:


初始化  bitset 对象的方法

bitset<n>  b;

b n 位,每位都 0

bitset<n> b(u);

b unsigned long u 的一个副本

bitset<n>  b(s);

b string 对象 s 中含有的位串的副本

bitset<n> b(s, pos,  n);

b s 中从位置 pos开始的n个位的副本


例:bitset<32> bitvec; // 32 bits, 全为0


bitset操作

b.any()

b 中是否存在置为 1 的二进制位

b.none()

b 中不存在置为 1 的二进制位吗

b.count()

b 中置为 1 的二进制位的个数

b.size()

b 中二进制位的个数

b[pos]

访问 b 中在 pos 处二进制位

b.test(pos)

b 中在 pos 处的二进制位置为 1

b.set()

b 中所有二进制位都置为 1

b.set(pos)

b  中在 pos 处的二进制位置为 1

b.reset()

b 中所有二进制位都置为 0

b.reset(pos)

b  中在 pos 处的二进制位置为 0

b.flip()

b 中所有二进制位逐位取反

b.flip(pos)

b  中在 pos 处的二进制位取反

b.to_ulong()

b 中同样的二进制位返回一个 unsigned long

os << b

b  中的位集输出到 os


bitset用于二进制操作,如果大家想深入了解,请查询其他资料。