- 浏览: 719953 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1043)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (52)
- 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 (64)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
最新评论
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 9081.用常数1取代运行时间中的所有加法常数 2.在修改后的运行次 ... -
数据结构概论2
2012-06-04 22:19 761数据元素:组成数据的,有一定意义的基本单位,在计算机中通常作为 ... -
排序概念
2011-06-24 14:51 755数据表:待排序数据元素的有很集合 排序码:通常数据元素有多个 ... -
图的基本概念
2011-06-20 16:18 724完全图:n个顶点,n*(n-1)/2个边的无向图,就是无向完全 ... -
红黑树
2011-06-16 14:29 477红黑树: 1.根结点和所有的叶结点都是黑色 2.从根结点到叶结 ... -
链表反转
2011-06-12 18:03 1055template<typename T> v ... -
散列表(哈希表)
2011-06-09 09:55 1021散列表(hash table):是表示集合和字典的另一种有效方 ... -
跳 表
2011-06-08 11:12 767#ifndef SKIPLIST_H #define S ... -
字 典
2011-06-08 10:06 884字典:以集合为基础,并支持支持Member,Insert和Re ... -
LinkedSet
2011-06-07 13:08 885改了很久的bug #ifndef LINKEDSET_H ... -
Huffman树
2011-06-02 11:06 857Huffman树,又称最优二叉树,是一类加权路径长度最短的二叉 ... -
堆
2011-06-02 09:19 918在优先级队列的各种实现中,堆是最高效的一种数据结构 关键码: ... -
森 林
2011-06-01 11:09 559森林与二叉树互转,主要是子结点转左子树,兄弟结点转右子树 深 ... -
二叉树的链式实现
2011-05-31 11:24 1239binaryTree.h #ifndef LINKEDBI ... -
二叉树基本概念
2011-05-30 10:05 804一棵二叉树的结点的一个有限集合:该集合或者为空,或者是由一个根 ... -
树基本概念
2011-05-30 09:28 859结点(node):包含数据项及指向其他结点的分支。 结点的度( ... -
广义表
2011-05-27 10:57 894广义表的定义是递归的,因为在表的描述中又用到了表,允许表中有表 ... -
矩阵相关
2011-05-26 10:22 889矩阵:是一个具有m行n列的二维数组。 上三角矩阵:只存储对角 ... -
优先级队列
2011-05-21 11:24 571PQueue.h #ifndef PQUEUE_H #d ... -
链式队列
2011-05-20 12:05 798LinkedQueue.h #ifndef LINKEDQ ...
相关推荐
在C++的STL中实现由一个bitset类模板,其用法如下: std::bitset<64> bs; 也就是说,这个bs只能支持64位以内的位存储和操作;bs一旦定义就不能动态增长了。本资源附件中实现了一个动态Bitset,和标准bitset兼容。 /*...
bitset用法bitset用法bitset用法bitset用法bitset用法bitset用法
C语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC语言头文件 BITSETC...
acm相关资料vector、bitset、大数乘法等等
文档模仿STL库的BITSET写的一个bitset,但是和STL不同的是这个类是一个可以动态扩展的,使用方法和STL的类似,可以参考STL使用
bitset - Go包实现 bitsets
基于JDK1.8的BitSet 源码分析, 描述了实现的原理 个方法的含义 虽然没有写出实际的测试代码 但是只要是细度了我的这个分析 在使用的时候就不是问题了
RoaringBitmap, 在Java中,一个更好的压缩 bitset RoaringBitmap Bitsets,也称为位图,通常用作快速数据结构。 不幸的是,他们可以使用太多的内存。 为了补偿,我们经常使用压缩位图。咆哮位图是压缩位图,它比传统...
自己实现的bitset数据结构,在vs2005下编译通过。有测试成素。
使用C++编写的遗传算法,代码量200行左右,供大家学习研究,互相交流。
Bit Operation I 10進数で与えられた非負の整数xを2進数に変換し、32桁のビット列bとして出力してください。さらに、bに対して以下の処理をそれぞれ行ったビット列を出力してください。 反転: 全てのビットを反...
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。 下面是具体用法 构造函数 bitset常用构造函数有四种,如下 bitset<4> bitset1; //无参构造,...
Java 原生包 BitSet 源码,0~3年 Java 工程师必看,属于高级数据结构,利于进阶,面试必备!
NULL 博文链接:https://huangyunbin.iteye.com/blog/2194731
java bitset 高级数据结构 源码解析 适合 0-3 年开发人员,进阶、面试必备知识!
C++下的bitset,强大而简单的位运算功能,象使用数组一样对位进行操作
认识标准库bitset类型 位是用来保存一组项或者条件的yes/no(1或者0)信息的一种简洁方法,那么位集是二进制位的有序集。C++中标准库提供的bitset类在我们程序中很有效的简化了对于位集的处理。 bitset对象的...
10進数で与えられた2つの非負の整数a, bを2進数として扱い、それらのAND(論理積)、OR(論理和)、XOR(排他的論理和)を求め、32桁のビット列として出力してください。
C++ bitset——高端压位卡常题必备STL ———————————————————— 以下内容翻译自cplusplus.com,极大地锻炼了我的英语能力。 bitset存储二进制数位。 bitset就像一个bool类型的数组一样,但是有空间...
java基础之BitSet - 副本