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;
}

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

(0)

相关推荐

  • C语言实现的bitmap位图代码分享

    事实上,我们是用每一个 元素表示一个32位的二进制字符串,这样这个元素可以保留相邻32个号码是否存在的信息,数组范围就下降到10000000/32了.例如对于号码 89256,由于89256 mod 32=2789-8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1. #define WORD 32 #define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整 #define MASK 0x1F //16进制下的31 #define N

  • C语言位图算法详解

    本文详细讲述了位图算法的定义与C语言实现方法,分享给大家供大家参考之用.具体如下: 位图法定义: 位图法就是bitmap的缩写,所谓bitmap,是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况.通常是用来判断某个数据存不存在的. 例如,要判断一千万个人的状态,每个人只有两种状态:男人,女人,可以用0,1表示.那么就可以开一个int数组,一个int有32个位,就可以表示32个人.操作的时候可以使用位操作.   数据结构: unsigned int bit[N]; 在这个数组

  • C语言位图及位图的实现

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

  • C++ 位图及位图的实现原理

    概念 位图就是bitmap的缩写,所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,该数据都是不重复的简单数据.通常是用来判断某个数据存不存在的 例如:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中 如果不看数据量,我们第一想到的肯定就是依次从头遍历,但是这个数据量是非常大的,有40亿,遍历40亿次消耗的时间和内存是非常多的.但是引入位图后,就可以专门解决这种大量数据查找是否存在的问题.查找这个数是否存在所消耗

  • 详解Linux下读取位图的注意事项

    详解Linux下读取位图的注意事项 在Linux下读取位图遇到的问题,很好地体现了linux与Windows操作系统的不同.按理说位图格式与操作系统无关,读取也应该无关,实际上在位图读到内存中时已经不同.下面主要介绍自己在Linux下操作位图遇到的问题. (一).位图结构 位图一开始是两个结构体,包括位图的详细信息,是读取后面数据的关键.所以读取位图首先要正确读取这两个结构体:BITMAPFILEHEADER和BITMAPINFOHEADER.其具体定义为: typedef struct tag

  • 如何通过UltraEdit解析BMP文件内部结构(BMP位图基础)

    目录 初见位图 位图文件的基本结构 1.文件头信息块 2.图像描述信息块 3.颜色表 4.图像数据区 具体例子 初见位图 我们先打开画图随便画一幅图并采用24位bmp图像格式保存,就得到了一张24位真彩色的位图 BMP位图一般由4部分组成:文件头信息块.图像描述信息块.颜色表(在真彩色模式无颜色表)和图像数据区组成,以BMP为扩展名保存. 打开Windows的画图程序,在保存图像时,可以看到三个选项:2色位图(黑白).16色位图.256色位图和24位位图.这是最普通的生成位图的工具,在这里讲解的

  • C++哈希应用的位图和布隆过滤器

    目录 C++哈希应用的位图和布隆过滤器 一.位图 1.位图的概念 2.位图的面试题 3.位图的实现 4.位图的应用 二.布隆过滤器 1.布隆过滤器的提出 2.布隆过滤器的概念 3.布隆过滤器的插入 4.布隆过滤器的查找 5.布隆过滤器的删除 6.布隆过滤器的优点和缺点 三.海量数据面试题 1.哈希切割 2.位图应用 3.布隆过滤器 C++哈希应用的位图和布隆过滤器 一.位图 1.位图的概念 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景.通常是用来判断某个数据存不存在的.

  • C++中的位运算和位图bitmap解析

    目录 位运算总结 移位运算 位运算应用举例 位图 位运算总结 移位运算 移位运算是双目运算符,两个运算分量都是整形,结果也是整形. “<<” 左移:右边空出的位上补0,左边的位将从首位挤掉,其值相当于乘2. ">>"右移:右边的位被挤掉.对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统. 二进制补码运算公式: -x = ~x + 1 = ~(x-1) -(~x) = x+1 ~(-x) = x-1 x+y = x -

  • vue自定义加载指令v-loading占位图指令v-showimg

    目录 了解自定义指令的钩子函数 注册成为全局指令 需求描述 列表组件 ListCom.vue 加载动画组件 LoadingCom.vue 钩子函数 loading.js 分析上面的代码 main.js 中 注册成为全局指令 页面中使用加载动画指令 v-loading 占用图指令 v-showimg 占位图组件 ShowImgCom.vue 指令的书写 showimg.js main.js注册 指令的使用v-showimg指令 了解自定义指令的钩子函数 bind(){}:每当指令绑定到元素上的时候

  • C语言读取和存储bmp格式图片

    开发过程中有时候需要解析bmp数据,下面先简单介绍bmp数据组成,后面附上C语言读取和存储bmp格式图片代码. 典型的位图文件格式通常包含下面几个数据块: 1.BMP文件头:保存位图文件的总体信息. 2.位图信息头:保存位图图像的详细信息.位图信息:保存位图图像的详细信息. 3.调色板:保存所用颜色的定义.调色板:保存所用颜色的定义. 4.位图数据:保存一个又一个像素的实际图像.位图数据:保存一个又一个像素的实际图像. 1. BMP文件头(14字节) BMP文件头数据结构含有BMP文件的类型.文

  • 易语言利用鼠标模拟点击的方式实现自动画图的代码

    DLL命令表 .版本 2 .DLL命令 PostMessageA, 整数型, "user32.dll", "PostMessageA", , 如果函数调用成功,返回非零值:如果函数调用失败,返回值是零 .参数 hWnd, 整数型, , 其窗口程序接收消息的窗口的句柄 .参数 Msg, 整数型, , 指定被寄送的消息 .参数 wParam, 整数型, , 指定附加的消息特定的信息 .参数 IParam, 整数型, , 指定附加的消息特定的信息 自动绘画的代码 此功能需

  • 易语言制作二维码生成器

    DLL命令表 .版本 2 .DLL命令 二维码_外形设置, , "QRCodeWin32.dll", "QRAppearance" .参数 模块尺寸, 双精度小数型 .参数 方向, 整数型 .参数 边框, 整数型 .DLL命令 二维码_编码参数, , "QRCodeWin32.dll", "QRConfigure" .参数 版本, 整数型 .参数 纠错级别, 整数型 .参数 掩膜, 整数型 .DLL命令 二维码_默认设置, ,

随机推荐