2010/10/30
关键字:bitset
bitset
使用bitset必须包含头文件和命名空间:
#include<bitset>
using std::bitset;
类似vector,bitset类也是一种模板,但其对象区别在于长度而不是类型.在定义bitset时要明确bitset含有多少位,必须在<>中给出长度:
bitset<32> bitvec; //32位初始化为全0
有下面几种初始化方式:
bitset初始化方式 | |
bitset<n> b; | b有n位,初始化为全0 |
bitset<n> b(u); | b有n位,初始化为unsigned long类型u的一个副本 |
bitset<n> b(s); | b有n位,初始化为string类型s的一个副本 |
bitset<n> b(s, pos, n); | b有n位,初始化为s从pos位置开始的n个位的副本 |
从string对象读入bitset的顺序是从右向左,举个例子:
string s(“11010110000000”);
bitset<16> bitvec(s, 2, 4);
bitvec中的位集实际为”0000000000001100”
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() | 将所有位都置为1 |
b.set(pos) | 将pos位置为1 |
b.reset(pos) | 将pos位置为0 |
b.reset() | 将所有位置为0 |
b.flip() | 将所有位取反 |
b.flip(pos) | 将pos位取反 |
b.to_ulong() | 返回unsigned long类型变量 |
os << b | 位集输出到os流 |
其中需要注意的一个函数是to_ulong(),如果unsigned long类型存不下bitset对象,则会产生运行时异常.
注意:size_t在cstddef头文件中定义的机器相关的无符号整型,该类型足以保存最大数组长度.