C语言位图及位图的实现

 更新时间:2021年05月31日 17:15:01   作者:WhiteShirtI  
这篇文章主要为大家详细介绍了C语言位图及位图的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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;
}

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

相关文章

  • C语言仿QQ聊天界面抖动功能

    C语言仿QQ聊天界面抖动功能

    这篇文章主要为大家详细介绍了C语言仿QQ聊天界面抖动功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • c语言B树深入理解

    c语言B树深入理解

    B树是为磁盘或其他直接存储设备设计的一种平衡查找树,本文将详细介绍c语言B树,需要的朋友可以参考下
    2012-11-11
  • 解析Linux下C++编译和链接

    解析Linux下C++编译和链接

    编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理。本文通过开发过程中碰到的四个典型问题来探索64位linux下C++编译&链接的那些事。
    2021-05-05
  • C++ 遍历某个文件夹下所有文件的方法步骤

    C++ 遍历某个文件夹下所有文件的方法步骤

    这篇文章主要介绍了C++ 遍历某个文件夹下所有文件的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C语言如何实现可变参数详解

    C语言如何实现可变参数详解

    这种可变参数可以说是C语言一个比较难理解的部分,下面这篇文章主要给大家介绍了关于C语言如何实现可变参数的相关资料,需要的朋友可以参考下
    2021-07-07
  • C++实现邻接表顶点的删除

    C++实现邻接表顶点的删除

    这篇文章主要为大家详细介绍了C++实现邻接表顶点的删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • ubunt18.04LTS+vscode+anaconda3下的python+C++调试方法

    ubunt18.04LTS+vscode+anaconda3下的python+C++调试方法

    这篇文章主要介绍了ubunt18.04LTS+vscode+anaconda3下的python+C++调试方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • VC6.0如何创建以及调用动态链接库实例详解

    VC6.0如何创建以及调用动态链接库实例详解

    作为客户与后台的中介,为了更好的调节两方的关系,我明智滴选择了webservice以及动态链接库。在与客户c++使动态链接库方式,而与后台java,使用webservice来交流沟通
    2013-01-01
  • C++实现合并排序的方法

    C++实现合并排序的方法

    这篇文章主要介绍了C++实现合并排序的方法,实例分析了合并排序的原理与相关实现技巧,需要的朋友可以参考下
    2015-07-07
  • C++中new与delete、malloc与free应用分析

    C++中new与delete、malloc与free应用分析

    这篇文章主要介绍了C++中new与delete、malloc与free应用分析,很重要的概念,需要的朋友可以参考下
    2014-08-08

最新评论