当前位置: 首页 > news >繁体>C++ 简易位图

C++ 简易位图

前言

位图没啥好说的,实际上就是将一个数组中所有二进制位拆分出来,一个bit表示一个bool量主要使用的还是位运算来做,非常简单,一看就会

一、整体思路

  • 根据用户需要使用的位图空间,申请一个适量大小的数组;
  • 按位获取或设置 每个bit位上的数据即可

二、几个易错步骤

1.初始化时

方便起见我将所有类型全设置为了无符号长整型;
用户传入需要的bit总长度,此时需计算需要创建的数组大小;

  1. 首先计算类型的bit长度:
    typeSz=类型占用字节数∗8\ typeSz = 类型占用字节数 * 8 typeSz=类型占用字节数8
  2. 接着进行一个向上取整的除法运算,在这里表示为:余数不为0则多申请一个数据空间
mapSz = len / typeSz + (len % typeSz ? 1 : 0);

此时mapSz就是需要申请的数组大小。
接着申请内存并初始化为0即可。

2.设置位置时

先找到目标位置
使用位运算或 将目标位置设置为1即可。

arr[index / typeSz] |= (1 << (index % typeSz));

3.获取位置时

同样也是找到目标位置;
判断该位置是否是1即可。

(arr[index / typeSz] >> (index % typeSz)) & 1;

三、完整代码

#include <iostream>
#include <cassert>
using namespace std;class BitMap
{typedef unsigned long T;T typeSz;T* arr = nullptr;		//位图数组T mapSz;	//数组大小T bitLen;	//总长度//初始化void init(T len){bitLen = len;typeSz = sizeof(T) * 8;mapSz = len / typeSz + (len % typeSz ? 1 : 0);if (arr != nullptr) delete arr;arr = new T[mapSz];for (size_t i = 0; i < mapSz; ++i)arr[i] = 0;}public://析构函数~BitMap(){if (arr != nullptr) delete arr;arr = nullptr;}//构造函数BitMap(T len){init(len);}//重置位图void reset(T len){init(len);}//设置位置void set(T index){assert(index < bitLen);arr[index / typeSz] |= (1 << (index % typeSz));}//获取位置bool get(T index){assert(index < bitLen);return (arr[index / typeSz] >> (index % typeSz)) & 1;}//数组方式获取位置bool operator[] (T index){return get(index);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-6880536.html

如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网进行投诉反馈,一经查实,立即删除!


相关文章:

  • 数学库:Extreme Optimization Numerical 8.1.4 Crack
  • tkinter绘制组件(39)——滑动控件
  • 2-4-JVM面试题
  • Linux做选择题时的要点
  • 《C++ Primer Plus》第16章:string类和标准模板库(1)
  • ubuntu 下的opencv3的下载与实现简单功能
  • Nginx——Keepalived的原理与配置
  • 基于数字孪生的智慧电网3D可视化运维系统
  • Linux远程软件(一)
  • 联想 System X3850 X6安装磁盘阵列
  • linux-centos U盘启动盘制作
  • linux-centos系统安装(物理机)
  • linux-安装centos7 系统
  • Tomcat安装并配置自启动
  • 桌面和纯命令界面切换(一)
  • 桌面和纯命令界面切换(二)
  • Redhat系统安装CentOS的yum源
  • shp导入mysql
  • Arcgis server10.5部署
  • OGC服务发布
  • Arcgis发服务流程
  • ArcgisServer屏蔽服务访问页面等安全漏洞
  • windows-远程连接显示CredSSP加密Oracle修正。
  • windows-服务器许可状态查看命令
  • CentOS7升级OpenSSH方案
  • Mysql如何下载
  • 二进制包/源码安装方式的MySQL卸载
  • Mysql 自动备份
  • oracle安装(windows)
  • Oracle启动(linux)
  • oracle12c静默安装(linux)
  • Oracle 12c客户端静默安装(linux)
  • tomcat日志切割
  • 查看数据库表空间
  • Linux系统查看系统位数
  • VM虚拟机网卡配置
  • 删除用户以及用户组
  • ELK软件安装
  • nginx注册为系统服务
  • oracle误删后数据恢复
  • NO1.高可用搭建-整体架构
  • NO2.高可用搭建-mysql安装和双主配置
  • NO3.高可用搭建-Mycat安装和配置mysql高可用
  • 判断一个日期是一年中的第几天
  • NO4.高可用搭建-activemq安装和配置密码
  • NO5.高可用搭建-redis安装并配置后台运行
  • NO6.高可用搭建-tomcat安装并配置session共享
  • NO7.高可用搭建-nginx安装并注册为系统服务
  • NO8.高可用搭建-Keepalive安装
  • HP L380 G9磁盘阵列安装