本文实例为大家分享了C语言位图及位图的实现具体代码,供大家参考,具体内容如下
1.概念
位图(bitset)是一种常用的数据结构,常用在给一个很大范围的数,判断其中的一个数是不是在其中。在索引、数据压缩方面有很大的应用。
位图是用数组实现的,数组的每一个元素的每一个二进制位都表示一个数据,0表示该数据不存在,1表示该数据存在。
2.C++库中bitset的使用
3.bitset的简单实现

当我们存放一个数据时的思路是:
1)确定数据在哪个区间上,即_bitSet的第几个元素上,_bitSet是顺序表,每个元素是char类型,value/8可得到
2)确定数据在哪个区间的哪个bit位上,value%8可以得到
3)找到该位置后,将bit位置1
4)重置的时候,将该bit位置0
- #pragma once
- #include<vector>
-
- //只能用于整型,节省空间
- class BitSet
- {
- public:
- BitSet(size_t range)
- {
- //当range为8以下的时候,会开辟0个空间,会出错
- _bitSet.resize(range/8+1,0);
- }
-
- void Set(size_t value)
- {
- size_t index = value / 8; //value>>3
- size_t pos = value % 8;
-
- _bitSet[index] |= (1<<pos); //置1:或1
- }
-
- void ReSet(size_t value) //重置
- {
- size_t index = value / 8;
- size_t pos = value % 8;
-
- _bitSet[index] &= ~(1<<pos); //置0: 与0
- }
-
- bool Test(size_t value) //检测
- {
- size_t index = value / 8;
- size_t pos = value % 8;
-
- return _bitSet[index] & (1<<pos);
-
- }
-
- protected:
- vector<char> _bitSet;
- };
-
- void TestBitMap()
- {
- BitSet b(-1); //-1转为无符号数就是最大值
- b.Set(5);
- b.Set(999);
- b.Set(1022);
- b.Set(111110000);
-
- cout<<b.Test(5)<<endl;
- cout<<b.Test(100)<<endl; //100不在位图当中
- cout<<b.Test(999)<<endl;
- cout<<b.Test(1022)<<endl;
- cout<<b.Test(111110000)<<endl;
- }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。