- 浏览: 768759 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
bitSet.h
bitSet.cpp
#ifndef BITSET_H #define BITSET_H #include<assert.h> #include<iostream> using namespace std; const int DefaultSize=50; /* 16位无符号短整数实现位映射 */ template<typename T> class bitSet{ public: bitSet(int sz=DefaultSize); bitSet(const bitSet<T>& R); ~bitSet(){ delete []bitVector; } void makeEmpty(){ for(int i=0;i<vectorSize;i++) bitVector[i]=0; } unsigned short getMember(const T x); void putMember(const T x,unsigned short v); bool addMember(const T x); bool delMember(const T x); bitSet<T>& operator=(const bitSet<T>& R); bitSet<T>& operator+(const bitSet<T>& R); bitSet<T>& operator*(const bitSet<T>& R); bitSet<T>& operator-(const bitSet<T>& R); bool Contains(const T x); bool subSet(bitSet<T>& R); bool operator==(bitSet<T>& R); friend istream& operator>>(istream& in,bitSet<T>& R); friend ostream& operator<<(ostream& out,bitSet<T>& R){ for(int i=0;i<R.setSize;i++){ out << R.bitVector[i] << ","; } out << endl; return out; } private: int setSize; int vectorSize; unsigned short *bitVector; }; #endif // BITSET_H
bitSet.cpp
#include"bitSet.h" #include<iostream> using namespace std; template<typename T> bitSet<T>::bitSet(int sz):setSize(sz) { assert(setSize>0); vectorSize = (setSize+15)>>4; bitVector = new unsigned short[vectorSize]; assert(bitVector!=NULL); for(int i=0;i<vectorSize;++i) bitVector[i]=0; } template<typename T> bitSet<T>::bitSet(const bitSet<T> &R) { setSize=R.setSize; vectorSize=R.vectorSize; bitVector = new unsigned short[vectorSize]; for(int i=0;i<R.vecterSize;++i){ bitVector[i]=R.bitVector[i]; } assert(bitVector!=NULL); } /* 获得集合元素x在bitVector中相应位置的值 */ template<typename T> unsigned short bitSet<T>::getMember(const T x) { int ad=x/16,id=x%16; unsigned short elem=bitVector[ad]; return ((elem>>(15-id))%2); } template<typename T> void bitSet<T>::putMember(const T x,unsigned short v) { int ad=x/16,id=x%16; unsigned short elem=bitVector[ad]; unsigned short temp=elem>>(15-id); elem=elem<<(id+1); if(temp%2==0&&v==1) temp+=1; else if(temp%2==1&&v==0) temp-=1; bitVector[ad]=(temp<<(15-id))|(elem>>(id+1)); } template<typename T> bool bitSet<T>::addMember(const T x) { assert(x>=0&&x<setSize); if(getMember(x)==0){ putMember(x,0); return true; } return false; } template<typename T> bitSet<T>& bitSet<T>::operator+(const bitSet<T>& R) { assert(vectorSize==R.vecterSize); bitSet temp(vectorSize); for(int i=0;i<vectorSize;++i){ temp.bitVector[i]=bitVector[i]|R.bitVector[i]; } return temp; } template<typename T> bitSet<T>& bitSet<T>::operator*(const bitSet<T>& R) { assert(vectorSize==R.vecterSize); bitSet temp(vectorSize); for(int i=0;i<vectorSize;++i){ temp.bitVector[i]=bitVector[i]&R.bitVector[i]; } return temp; } template<typename T> bitSet<T>& bitSet<T>::operator-(const bitSet<T>& R) { assert(vectorSize==R.vecterSize); bitSet temp(vectorSize); for(int i=0;i<vectorSize;++i){ temp.bitVector[i]=bitVector[i]&!R.bitVector[i]; } return temp; } template<typename T> bool bitSet<T>::Contains(const T x) { assert(x>=0&&x<=setSize); return getMemeber(x)==1?true:false; } template<typename T> bool bitSet<T>::subSet(bitSet<T> &R) { assert(setSize==R.setSize); for(int i=0;i<vectorSize;++i){ if(bitVector[i]&!R.bitVector[i]) return false; } return true; } template<typename T> bool bitSet<T>::operator==(bitSet<T>& R) { assert(setSize==R.setSize); for(int i=0;i<setSize;++i){ if(bitVector[i]!=R.bitVector[i]) return false; } return true; }
发表评论
-
时间复杂度推导
2012-06-05 22:57 9831.用常数1取代运行时间中的所有加法常数 2.在修改后的运行次 ... -
数据结构概论2
2012-06-04 22:19 809数据元素:组成数据的,有一定意义的基本单位,在计算机中通常作为 ... -
排序概念
2011-06-24 14:51 789数据表:待排序数据元素的有很集合 排序码:通常数据元素有多个 ... -
图的基本概念
2011-06-20 16:18 750完全图:n个顶点,n*(n-1)/2个边的无向图,就是无向完全 ... -
红黑树
2011-06-16 14:29 516红黑树: 1.根结点和所有的叶结点都是黑色 2.从根结点到叶结 ... -
链表反转
2011-06-12 18:03 1101template<typename T> v ... -
散列表(哈希表)
2011-06-09 09:55 1081散列表(hash table):是表示集合和字典的另一种有效方 ... -
跳 表
2011-06-08 11:12 805#ifndef SKIPLIST_H #define S ... -
字 典
2011-06-08 10:06 926字典:以集合为基础,并支持支持Member,Insert和Re ... -
LinkedSet
2011-06-07 13:08 925改了很久的bug #ifndef LINKEDSET_H ... -
Huffman树
2011-06-02 11:06 917Huffman树,又称最优二叉树,是一类加权路径长度最短的二叉 ... -
堆
2011-06-02 09:19 952在优先级队列的各种实现中,堆是最高效的一种数据结构 关键码: ... -
森 林
2011-06-01 11:09 602森林与二叉树互转,主要是子结点转左子树,兄弟结点转右子树 深 ... -
二叉树的链式实现
2011-05-31 11:24 1265binaryTree.h #ifndef LINKEDBI ... -
二叉树基本概念
2011-05-30 10:05 844一棵二叉树的结点的一个有限集合:该集合或者为空,或者是由一个根 ... -
树基本概念
2011-05-30 09:28 894结点(node):包含数据项及指向其他结点的分支。 结点的度( ... -
广义表
2011-05-27 10:57 936广义表的定义是递归的,因为在表的描述中又用到了表,允许表中有表 ... -
矩阵相关
2011-05-26 10:22 932矩阵:是一个具有m行n列的二维数组。 上三角矩阵:只存储对角 ... -
优先级队列
2011-05-21 11:24 604PQueue.h #ifndef PQUEUE_H #d ... -
链式队列
2011-05-20 12:05 829LinkedQueue.h #ifndef LINKEDQ ...
相关推荐
### Bitset用法详解 在C++编程语言中,`bitset`是一个非常有用的类模板,它可以帮助程序员高效地处理二进制数据。`bitset`的主要功能是存储位序列,并提供了丰富的成员函数来对这些位进行操作。下面我们将详细介绍`...
在C++的STL中实现由一个bitset类模板,其用法如下: std::bitset<64> bs; 也就是说,这个bs只能支持64位以内的位存储和操作;bs一旦定义就不能动态增长了。本资源附件中实现了一个动态Bitset,和标准bitset兼容。 /*...
C语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC...
Java的BitSet是一个实用工具类,它提供了位操作的功能,常用于存储一组可变的布尔值。在多线程并发环境中,对BitSet的操作需要特别注意,因为位操作本身是原子性的,但BitSet的大部分方法并不是线程安全的。这篇博文...
在Go编程语言中,`bitset`是一个非常实用的包,用于高效地处理位集(也称为位向量或位数组)。位集是一种特殊的数据结构,它使用二进制位来表示一系列布尔值,通常用于存储有限集合的成员资格。Go的`bitset`包实现了...
`C++ bitset` 是一个内置的类型,用于在内存中高效存储和操作位序列。在C++标准库中,`<bitset>` 头文件提供了`std::bitset` 类模板,它允许我们创建一个固定大小的位集合,类似于二进制数。然而,题目中的描述表明...
文档模仿STL库的BITSET写的一个bitset,但是和STL不同的是这个类是一个可以动态扩展的,使用方法和STL的类似,可以参考STL使用
This bitset type is a thin wrapper round a dm_array of 64bit words.This bitset type is a thin wrapper round a dm_array of 64bit words.
基于JDK1.8的BitSet 源码分析, 描述了实现的原理 个方法的含义 虽然没有写出实际的测试代码 但是只要是细度了我的这个分析 在使用的时候就不是问题了
RoaringBitmap, 在Java中,一个更好的压缩 bitset RoaringBitmap Bitsets,也称为位图,通常用作快速数据结构。 不幸的是,他们可以使用太多的内存。 为了补偿,我们经常使用压缩位图。咆哮位图是压缩位图,它比传统...
Java中BitSet类是Java集合框架的一部分,它是一种用于处理位操作的高级数据结构。BitSet可以看作是一个只存储布尔值的数组,但相比于原始的布尔数组,BitSet更加内存高效,因为它以64位的块(word)来存储多个布尔值...
C++中的`bitset`是一个非常实用的容器,它允许我们以数组的形式操作位,从而方便地处理位级别的逻辑运算。`bitset`是C++标准库的一部分,属于STL(Standard Template Library),它提供了高效且易用的方法来管理一组...
《 C++ 修炼全景指南:十四 》大数据杀手锏:揭秘 C++ 中 BitSet 与 BloomFilter 的神奇性能! https://lenyiin.blog.csdn.net/article/details/142710211 这篇博客所涉及的所有完整代码 。本篇博客深入探讨了 C++ ...
《前端项目:深入理解bitset.js库》 在前端开发中,高效的数据结构和算法是提升应用性能的关键。其中,bitset是一种特殊的数据结构,它在内存中以二进制位的形式存储数据,常用于大规模布尔值的高效管理。本文将...
使用C++编写的遗传算法,代码量200行左右,供大家学习研究,互相交流。
开源项目-xojoc-bitset.zip是一个专注于位集数据结构的开源项目,名为bitset-master。位集,也称为位向量或位数组,是计算机科学中一种高效的数据结构,用于存储和操作二进制位。在许多算法和数据处理场景中,位集因...
Bit Operation I 10進数で与えられた非負の整数xを2進数に変換し、32桁のビット列bとして出力してください。さらに、bに対して以下の処理をそれぞれ行ったビット列を出力してください。 反転: 全てのビットを反...
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。 下面是具体用法 构造函数 bitset常用构造函数有四种,如下 bitset<4> bitset1; //无参构造,...
Java编程中的HashSet和BitSet详解 HashSet和BitSet是Java编程中两个常用的集合类,它们都可以用来存储大量的数据,但它们之间有着明显的差异。那么,为什么Apache Commons作者选择使用BitSet代替HashSet呢?在本文...