算法训练营:提高篇(全彩版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.1 定义和初始化

1.定义位图

在定义位图时,需要在尖括号内给出它的位数。“bitset<32> bitvec;”表示定义bitvec为32位的位图对象,其位序自右向左为0~31。下面列出了位图的几种定义方式:

2.用unsigned值初始化位图对象

当将unsigned long值作为位图对象的初始值时,该值将被转换为二进制位模式,而位图对象中的位集将作为这种位模式的副本。若位图的二进制位数大于unsigned long值的二进制位数,则将其余高位设置为0;若位图的二进制位数小于unsigned long值的二进制位数,则只用unsigned long值中的低位,丢弃超过位图的二进制位的高位。在有32位unsigned long值的机器上,十六进制值0xffff被表示为二进制位就是16个1和16个0(每个0xf都可被表示为1111)。可以用0xffff初始化位图对象:

在上面的3个例子中,第0~15位都被设置为1。由于bitvec1的二进制位数小于unsigned long值的二进制位数,因此bitvec1初始值的高位被丢弃。bitvec2与unsigned long值的二进制位数相同,因此所有位正好都被设置为初始值。因为bitvec3的二进制位数大于32,所以31位以上的高位都被设置为0。

输出位图对象:

3.用string对象初始化位图对象

当用string对象初始化位图对象时,string对象直接被表示为二进制位模式。若string对象的字符数小于位图对象的二进制位数,则位图对象的高位将被设置为0。

注意 string对象的最右边字符用于初始化位图对象的低位。

bitvec5(str, 5, 4)表示从str[5]开始取4个字符初始化bitvec5。若省略第3个参数,则表示取从开始位置一直到string对象末尾的所有字符。