对于要处理二进制位的有序集,每个位可能包含0或1值,我们可以用C++标准库中的bitset类型。
该类型的声明与vector等基本相同,不同的是vector定义时是存放的数据类型,而bitset存放的是大小,
例如:
bitset<32> bitvec;//32 bits,all zero
对其初始化有以下几种方法:
1.bitset<n> b; //b有n位,每位都为0
2.bitset<n> b(u); //b是unsigned long型u的一个副本
3.bitset<n> b(u); //b是string对象s中含有的位串的副本
例:bitset<16> bitvec(0xffff);//bits 0.....15 are set to 1
4.bitset<n> b(s,pos,n); //b是s中从位置pos开始的n个位的副本
例:string str("1111111000000011001101");
bitset<32> bitvec(str,5,4) //4 bits starting at str[5],1100
5.bitset<n> b(s,pos);//b是s中pos开始一直到末尾的一个副本
例:string str("1111111000000011001101");
bitset<32> bitvec(str,str.size-4) //use last 4 characters 即1101,其余高位均为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