/l:{0,1,2,3,4,5,6,7,8,9} s4:{7,8,9} index=sl. subset(s4);/判断s1是否为s4子集 cout<< index<end;∥结果, index=0 equal =(sl==$2); /(集合S1与S2比较相等 cout<< equal<<endl;∥为0,两集合不等
//s1: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} //s4: {7, 8, 9} index = s1.subSet (s4); //判断s1是否为s4子集 cout << index << endl; //结果,index = 0 equal = (s1 == s2); //集合s1与s2比较相等 cout << equal << endl; //为0, 两集合不等 11
构造函数的实现 template <class t> bitset<T: bitset( int sz): setsize(Sz){∥构造函数 assert(setsize>0) /检查参数的合理性 vector Size=( setSize+15)>>4;∥存储数组大小 bit Vector new unsigned shortlvector Size ] /13) 配空间 assert (bit Vector NULl) 检查存储分配是否成功 for(int 1=0; 1< vectorIze; 1++) bit Vector[1=0 初始化
构造函数的实现 template <class 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; //初始化 }; 12
template<class t> unsigned short bitset<T>: getMember (const Tx)i ∥读取集合元素X,X从0开始 int ad =x/16 int id=x016 unsigned short elem= bit Vector[ad] return((elem >>(15-1d))%2)
template<class T> unsigned short bitSet<T>:: getMember (const T x) { //读取集合元素x,x从0开始 int ad = x/16; int id = x%16; unsigned short elem = bitVector[ad]; return ((elem >> (15 - id)) %2); }; 13
template<class t> void bitset<t>: putMember(const Tx, unsigned short v){将值v送入集合元素x int ad=/16 int id=x0o16 unsigned short elem= bit Vector [ad unsigned short temp=elem >>(15-id); elem=elem <<(id+1) if(temp%02==0 &&v==l)temp=temp+l else if (temp%2==1 &&v==)temp=temp-1 bit Vector[ad]=(temp<<(15-id))l(elem >>(id+1));
template<class T> void bitSet<T>:: putMember (const T x, unsigned short v) { //将值v送入集合元素x int ad = x/16; int 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 = temp +1; else if (temp%2==1 && v==0) temp = temp -1; bitVector[ad] = (temp<<(15-id)) | (elem >> (id+1)); }; 14
template<class t> bitset<t>& bitset<t> /)求集合this与R的并 operator + (const bitSet<T>& r)i assert (vectorIze ==R vector size ) bitSet temp(vector Size); for (int 1=0; 1< vector Size; 1++) temp. bit Vector1=bit VectoriR bit vector[1; return temp;∥按位求"或",由第三个集合返回
template<class T> bitSet<T>& bitSet<T>:: //求集合this与R的并 operator + (const bitSet<T>& R) { assert (vectorSize == R.vectorSize); bitSet temp (vectorSize); for (int i = 0; i < vectorSize; i++) temp.bitVector[i] = bitVector[i] | R.bitVector[i]; return temp; //按位求"或", 由第三个集合返回 }; 15