bit_vector位向量容器

3 篇文章 0 订阅

http://blog.163.com/zhoumhan_0351/blog/static/3995422720103892031806/


bit_vector位向量容器

一、原理
bit_vector位向量容器是一个bit位元素的序列容器,具有vector容器一样的成员函数,常用于硬件端口的控制。区别于vector<bool>的一个重要特性是bit_vector更节省内存空间,一个元素只占用一个bit,而不是一个字节。bit_vector用vector作后缀名,实际与vector并没有任何关联。

bit_vector容器的每个元素是一个 bit 位值,取 0 或 1,连续分配在以字为单位的字节块中。




    bit_vector容器的实现,首先需要解决若干bit位的内存分配和迭代器对bit位元素的随机读写问题。 
    bit 位的内存分配,由内存分配器根据 bit 位的个数需求,一次性地分配若干字,以后通过动态分配内存进行bit位的添加。 
随机访问迭代器,通过所在的字和位的偏移给出一个 bit 位的确切位置。bit 位的随机读写,利用C++的bit位操作运算,如位与、位或和异或等,判断某个bit位值为1或0,或设置某个bit位为1或0。

如图所示,假设为bit位分配了连续的3个机器字的空间,共6个字节,16×3=48个 bit。为了对灰色的 bit 位进行读写,Bit_reference 结构体使用了一个标志 bit 位所在字的M_p指针变量,它的类型为unsigned int*,正好作为一个字的指针类型。此外,还使用一个M_mask变量,标记bit位在这个字中的偏移量。对于图所示的情形,M_p指向灰色bit位所在的第2个字,M_mask为0010000000000000,唯一的一个“1”,表示当前读写的bit位的位置。



实现代码可参见SGI的stl_bvector.h文件。
二、应用
类同vector,只是由以前的一个数据类型(如int等)变成bool型对象。如:下面的 insert 函数,在pos位置前插入一个新的bit位元素,元素值由x给出。 
iterator insert(iterator pos, bool x)//x为0或1
利用bit_vector位向量容器,可直观地对整型数据的bit位进行处理。一串bit位数据可直接逐位写入容器,而不需要先将若干bit位转换为整数才可写入某个整型变量。 
从实现源码来看,bit_vector容器与vector基本上具有相同的接口,只是bit_vector的迭代器稍为复杂些,需要通过bit位所在的字和字中的偏移量给出当前bit位的位置。总的来说,bit_vector容器的功能,vector<bool>也可以实现,只是使用vector要用一个字节表示一个bit。明显地,从算法的空间复杂度考虑,vector<boo>不及bit_vector划算。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值