bit_vector位向量容器
来源:互联网 发布:国际软件测试资格认证 编辑:程序博客网 时间:2024/05/16 13:07
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划算。- bit_vector位向量容器
- bit_vector位向量容器
- STL(十)bit_vector位向量容器
- C++ STL学习笔记六 bit_vector位向量容器
- C++ STL学习笔记六 bit_vector位向量容器
- 向量容器
- 向量容器
- 位向量
- 位向量
- 位向量
- 向量容器的使用
- 第四章 向量容器
- vevector向量容器
- vector 向量容器
- miniVector模仿向量容器
- c++之向量容器
- 向量容器2
- Vector(向量容器)
- 几个 iptables 常用的实例
- 工作队列(workqueue) create_workqueue/schedule_work/queue_work
- LeetCode之Unique Binary Search Trees
- Axis2创建WebService实例
- System.getProperty()
- bit_vector位向量容器
- UVA 654 - Ratio(枚举)
- 程序中使用虚拟地址的好处
- C++ Primer 5 笔记 第二章 变量和基本类型
- 分析SQL Server 给出的missing index建议
- 适应各浏览器图片裁剪无刷新上传js插件
- cocos2d-x精灵切换动作出错
- VC++中使用gdi+的编绎问题
- Microsoft Sql server 2008 简体中文开发版安装指南