这篇文章主要介绍C语言中位图怎么实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文实例为大家分享了C语言位图及位图的实现具体代码,供大家参考,具体内容如下1.概念位图(bitset)是一种常用的数据结构,常用在给
这篇文章主要介绍C语言中位图怎么实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
本文实例为大家分享了C语言位图及位图的实现具体代码,供大家参考,具体内容如下
位图(bitset)是一种常用的数据结构,常用在给一个很大范围的数,判断其中的一个数是不是在其中。在索引、数据压缩方面有很大的应用。
位图是用数组实现的,数组的每一个元素的每一个二进制位都表示一个数据,0表示该数据不存在,1表示该数据存在。
当我们存放一个数据时的思路是:
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;}
以上是“C语言中位图怎么实现”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网其他教程频道!
--结束END--
本文标题: C语言中位图怎么实现
本文链接: https://lsjlt.com/news/278635.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0