四、标准库bitset类型
标准库中bitset类型用来处理二进制位的有序集,bitset类型简化了位集的处理,使用bitset时需要包含头文件#include<bitset>
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中含有的位串的副本,s是01串 |
bitset<n> b(s, pos, n); | b是s中从位置pos开始的n个位的副本 |
用unsigned long值初始化bitset对象
用unsigned long值初始化bitset对象的时候,将long值转化为二进制模式,然后拷贝到bitset的右方(bitset右边为低阶位,左边为高阶位),string位数多了将被截断,少了bitset将在前面补零。
用string对象初始化bitset对象
从string对象初始化bitset对象,需要注意的是,复制拷贝相当于从string位模式平移到了bitset。
例如:
string str(”11001010”);
bitset<32> bitvec(str);
这个时候,bitvec是这样的:0000 0000 0000 0000 0000 0000 1100 1010最右边是bitset的低阶位,即bitvec[0],bitset[1] …
bitset对象上的操作
操作调用方式 | 操作说明 |
b.any() | 测试b中是否有存在1的位 |
b.none() | 测试b中是否全0 |
b.count() | 测试b中置1的位个数 |
b.size() | b中所有二进制位个数 |
b[pos] | 访问下标为pos位置的位值 |
b.test(pos) | 测试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流 |
注:
Ø b.cout和b.size()返回的是size_t类型,该类型定义在cstddef头文件中(C标准头文件stddef.h的C++版本)
Ø b[pos]可以作为左值,即可以用来改变pos位置的值