标准库bitset类型

标准库 bitset 类型

bitset 对象的定义和初始化

bitset 必须得是一个类型模板,尖括号内给出的是 bitset 的长度值,编号从 0 开始,0 为低位。构造函数如下

1
2
3
4
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 个位元素的副本,省略第三个参数则代表一直取到尾

注:unsigned long 类型的数据会被 bitset 自动转成二进制。高位自动置0,如果不够位数则丢弃

注2:用 string 对象初始化 bitset 对象的时候,string 对象的最右边的那个字符在 bitset 中是低位,而且仅支持0、1组成的数字,如果是字母的话将会抛出异常!

bitset操作

1
2
3
4
5
6
7
8
9
10
11
12
13
b.any(); //是否存在置为1的位
b.none(); //是否不存在置为1的位
b.count(); //置1的二进制的个数
b.size(); //二进制位的个数
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(); //类型转换到unsigned long(仅当bitset长度小于unsigned long时可用)

注:to_ulong()如果硬要转换的话,会抛出异常std::overflow_error

测试整个 bitset 对象

bitset.count()bitset.size()函数返回值是一个 size_t 的类型 [区别于 string 类型的 string::size_type]

可以用下标法读写 bitset 中的二进制位 [区别于 vector,因为 bitset 的大小已经规定好了,所以不存在越界添加的问题 ]