C++STL位标志、智能指针与异常处理

参考《21天学通C++》第25章节,对STL位标志进行介绍。就是当需要不是像char int long 等整个字节数的数据表示形式,而是使用二进制位表示的时候,通常使用这里讲到的位标志。从C++标准模板库的角度讲,实现了两种形式的位标志:bitset类与vector<bool> 模板来较为方便的实现各种各样的位存储与位操作。

一、使用STL位标志

位是存储设置与标志的高效方法。标准模板库提供了可帮助组织与操作位信息的类。

1. bitset类

std::bitset不是STL容器类,因为它不能调整长度,这是一个实用类,针对处理长度在编译阶段已知的位序列进行了优化。需包含#include <bitset>。

2. 实例化bitset

bitset <4> fourBits;

bitset <5> fiveBits ("10101");

bitset <8> eightBitsCopy(eightbits);

可以利用整数来初始化位。

但是得记住:bitset不像vector那样,它的位数在编译阶段指定的,而不是动态调整的,因此指定后就不能插入更多的位。

3. bitset类操作运算符与成员函数

bitset提供了一些很有用的运算符,比如:

<<  将位序列的文本插入到输入流中;

>>  将一个字符插入到bitset对象中;

&   执行按位与;

|   执行按位或;

^   执行按位异或;

~   执行按位取反;

>>= 执行按位右移操作;

<<= 执行按位左移操作;

运算符[N] 提供类似数组下标的引用访问方式;

位是可以存储两种状态,对bitset的内容操作,可使用如下的成员函数对bitset中的一位或所有位进行操作:

set  将序列中的所有位进行置位操作;

set(N,val=1) 将N+1位设置为val指定的值,默认为1;

reset  将序列中的所有位进行复位操作;

reset(N) 将N+1位进行复位操作

flip  将位序列中的所有位取反;

size  返回序列中的位数;

count  返回序列中值为1的位数;

4. vector <bool>

STL bitset的缺点之一就是不能动态调整长度;为了克服这种缺点,STL向程序员提供了vector <bool>。

vector <bool>是对vector的部分具体化,用于存储布尔数据,可用于动态调整长度,因此程序员无需在编译阶段知道要存储的布尔标志数。

除了对于vector<bool>提供了函数flip,用于将序列中的布尔值取反之外,其他操作与vector大部分相同。不再赘述。

5. 总结

bitset是处理位序列和位标志最有效的工具;另外通过vector<bool>能提供动态bool。

************************

2015-8-9


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhang_P_Y

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值