数据结构—位图
来源:互联网 发布:python pil和opencv 编辑:程序博客网 时间:2024/05/10 08:35
在计算机中,每一个数据都是以二进制0/1来保存,每一个字节byte包括8个bit,每一个bit存储一个0/1的信息。
一 .为什么使用位图
我们可以通过对每一个bit位的操作来标识一些信息,比如当当前bit为0时,表示不存在,当当前bit为1时,表示存在。
而位图正是利用每一个bit位能标识两种不同的信息。那么我们在构建位图之前,我们先来了解下,在计算机中的位运算。
二 .如何来构建位图
1.首先,我们需要一个数组,这个数组我们拿char类型为例,也就是说,我们数组中的一个元素,有8个bit位,可以存放8个标识。
2.此时我们需要来确定这个数组需要多少元素来标识我们的信息。我们需要计算当前存放类型的大小,
类型大小*8=一个元素可以标识的信息个数。接下莱,我们需要知道当前需要存放信息的范围,
范围%一个元素可以标识信息的个数+1=我们需要多少元素。
3.最后,我们需要利用位运算符来添加我们存放的数据信息,删除我们存放的数据信息,判断数据是否存在。当前需要操作的数据,先来判断他在哪个数组的元素中(位置=当前数据/一个元素可以标识的信息个数),然后来判断他在此元素的几个位(位=当前数据%一个元素可以标识的信息个数)。
#include<iostream>#include<vector>using namespace std;template<class T = char>class mapbit{public: mapbit(size_t data) :range(sizeof(range) << 3) { _mapbit.resize(data / range + 1); } void set(size_t data) { size_t pos = data / range; size_t num = data%range; _mapbit[pos] |= 1 << num; } void reset(size_t data) { size_t pos = data / range; size_t num = data%range; _mapbit[pos] &= ~(1 << num); } bool test(size_t data) { size_t pos = data / range; size_t num = data%range; return(_mapbit[pos] >> num) & 1; }private: vector<T> _mapbit; T range;};int main(){ mapbit<> m1(103); m1.set(1); m1.set(8); m1.set(9); m1.test(1); m1.set(103); m1.reset(1); m1.reset(9); m1.reset(8); cout << m1.test(102) << endl; return 0;}
阅读全文
0 0
- 数据结构—位图
- 位图数据结构
- 位图数据结构
- 【数据结构】位图
- 【数据结构】位图
- 数据结构--位图
- 数据结构:位图
- matlab实现位图数据结构
- 位图数据结构的运用
- 位图文件的数据结构
- 数据结构:位图法
- 【转】数据结构:位图法
- 数据结构:位图法
- 数据结构之位图(11)
- [整理]数据结构----位图法
- [数据结构]利用位图排序
- 位图数据结构的
- 数据结构之位图
- 非211计算机保研的那些事
- 算法:单调递增最长子序列
- java 集合总结
- 使用布局(layout)资源
- C#-接入声网SDK实现网页版1对1视频通话以及边录制边上传
- 数据结构—位图
- 什么是分布式系统
- 将指定工程文件脱离svn版本控制
- quartz集群(二)
- BUG
- 三种数据不一致性
- a标签传输汉字和form传输汉字的区别,以及转utf-8
- Java Web后端--入职技能任务单(SSM框架搭建)三
- IE6 浏览器常见兼容问题 大汇总(23个)