bitset容器用法(附例题)

什么是bitset

bitset 是STL库中的二进制容器;

bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一;

bitset有一个特性:整数类型和布尔数组都能转化成bitset;

bitset中的每个元素都能单独被访问,例如对于一个叫做foo的bitset,表达式foo[3]访问了它的第4个元素,就像数组一样;

bitset的大小在编译时就需要确定。如果你想要不确定长度的bitset,请使用(奇葩的)vector

使用方法

初始化bitset对象的方法

bitset b;

bn位,每位都为0

bitset<nb(u);

bunsigned longu的一个副本

bitset<nb(s);

bstring对象s中含有的位串的副本

bitset<nb(sposn);

bs中从位置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


你可能感兴趣的:(c,c++,?)