标准库 bitset
有些程序要处理二进制位的有序集,每个位可能包含 0(关)1(开)值。位是用来保存一组项或条件的 yes/no 信息(有时也称标志)的简洁方法。标准库提供的 bitset类简化了位集的处理。要使用 bitset 类就必须包含相关的头文件。
类似于 vector,bitset 类是一种类模板;而与 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用于二进制操作,如果大家想深入了解,请查询其他资料。