什么是bitset
bitset 是STL库中的二进制容器;
bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一;
bitset有一个特性:整数类型和布尔数组都能转化成bitset;
bitset中的每个元素都能单独被访问,例如对于一个叫做foo的bitset,表达式foo[3]访问了它的第4个元素,就像数组一样;
bitset的大小在编译时就需要确定。如果你想要不确定长度的bitset,请使用(奇葩的)vector<bool>。
使用方法
初始化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<5> bi;
这样就初始化了一个长度为5的变量名为bi的bitset。
赋值
bitset重载了[]运算符,故可以像bool数组那样赋值。
bi[2] = 1;
这样就能把第三位赋值为1;
注意
bitset 高位在左,低位在右,使用时需注意。如下表
bi[4] | bi[3] | bi[2] | bi[1] | bi[0] |
0 | 0 | 1 | 0 | 0 |
常用函数
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
os << b 把b中的位集输出到os流
参考资料:《C++ Primer》
MSDN:http://msdn.microsoft.com/zh-cn/library/zfae7kt8.aspx
例题见题解链接:https://blog.csdn.net/GodJing007/article/details/81044243