bitset

写在前面:

LeetCode刷着题,遇到一个黑科技bitset,之前没有遇到过。


bitset存储位(元素只有两个可能的值:0或1,true或false,…)。
这个类模拟一个布尔元素的数组,但是为空间分配进行了优化:通常,每个元素只占用一个位(在大多数系统上,它比最小的元素类型char少八倍)。
每个位的位置可以单独访问:例如,对于一个名为foo的给定位集,表达式foo [3]访问其第四个位,就像普通数组访问其元素一样。但是因为在大多数C ++环境中没有元素类型是单个的,所以单独的元素被作为特殊的引用类型来访问(参见bitset :: reference)。
位集具有能够构建并转换为整数值和二进制字符串的功能(请参阅其构造函数和成员to_ulong和to_string)。它们也可以直接从二进制格式的流中插入和提取(请参阅适用的操作符)。
一个bitset的大小在编译时是固定的(由它的模板参数决定)。对于也优化了空间分配并允许动态调整大小的类,请参阅矢量(矢量< bool>)的布尔专业化。

有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。

类似于vector,bitset类是一种类模板;而与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值:

bitset<32> bitvec; //32位,全为0。

注意点:
1.模板参数即位数必须为常量表达式,长度值必须定义为整型字面值常量或是已用常量值初始化的整数类型的const对象。
2.只能按位访问
3.位置的编号从0开始 上面的例子从0到31,0开始的是低位,31是高位。
4.当用unsigned long值作为bitset对象的初始值时,该值将转化为二进制的位模式。而bitset对象中的位集作为这种位模式的副本。如果bitset类型长度大于unsigned long值的二进制位数,则其余的高阶位置为0;如果bitet类型长度小于unsigned long值的二进制位数,则只使用unsigned值中的低阶位,超过bitet类型长度的高阶位将被丢弃。
5. 当用string对象初始化bitset对象时,string对象直接表示为位模式。从string对象读入位集的顺序是从右向左。这里注意是从右往左转换的,其次是将字符串对应的01转换成对应的位。
这里写图片描述
http://blog.csdn.net/qll125596718/article/details/6901935

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值