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++ vector容器 find erase的使用操作:查找并删除指定元素

    C++ vector容器 find erase的使用操作:查找并删除指定元素

    这篇文章主要介绍了C++ vector容器 find erase的使用操作:查找并删除指定元素,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • C语言实现从指定位置截取文件内容

    C语言实现从指定位置截取文件内容

    这篇文章主要为大家详细介绍了如何利用C语言实现从指定位置截取文件内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • C++利用类实现矩阵的数乘,乘法以及点乘

    C++利用类实现矩阵的数乘,乘法以及点乘

    这篇文章主要为大家详细介绍了C++如何利用类实现矩阵的数乘,乘法以及点乘,文中的示例代码讲解详细,对我们学习C++有一定帮助,需要的可以参考一下
    2022-11-11
  • C++深入讲解namespace与string关键字的使用

    C++深入讲解namespace与string关键字的使用

    namespace命名空间或者叫名字空间,传统的c++只有一个全局的namespace,namespace引入了复杂性。namespace允许像类,对象,函数聚集在一个名字下。本质上讲namespace是对全局作用域的细分
    2022-05-05
  • C++实现正整数的四则运算表达式

    C++实现正整数的四则运算表达式

    这篇文章主要为大家详细介绍了C++实现正整数的四则运算表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • QT实战之实现图片浏览系统

    QT实战之实现图片浏览系统

    这篇文章主要介绍了如何利用QT编写一个图片浏览系统,可以支持自动播放,左右拖动切换,点击列表切换,点击按钮切换等功能,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-04-04
  • C语言中数据的存储详解

    C语言中数据的存储详解

    这篇文章主要为大家介绍了C语言中数据的存储,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助,希望能够给你带来帮助
    2021-11-11
  • C++ STL实现非变易查找算法的示例代码

    C++ STL实现非变易查找算法的示例代码

    C++ STL 中的非变易算法(Non-modifying Algorithms)是指那些不会修改容器内容的算法,是C++提供的一组模板函数,下面我们就来看看这一算法的应用吧
    2023-08-08
  • C++实现获取邮件中的附件

    C++实现获取邮件中的附件

    这篇文章主要为大家详细介绍了如何通过C++实现获取邮件文件中的附件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • LeetCode题解C++生成每种字符都是奇数个的字符串

    LeetCode题解C++生成每种字符都是奇数个的字符串

    这篇文章主要为大家介绍了LeetCode题解C++生成每种字符都是奇数个的字符串示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论