/s1:{0,1,2,3,4,5,6,7,8,9y /s4:{7,8,9y index=sl.subSet(s4);/判断s1是否为s4子集 cout<<index<<endl;/结果,index=O equal (s1 =s2); /集合S1与S2比较相等 cout<<equal<<endl;/为0,两集合不等 11
//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); 川检查参数的合理性 vectorSize =(setSize+15)>>4; /川存储数组大小 bitVector new unsigned short[vectorSize];/ 配空间 assert (bit Vector !=NULL); /检查存储分配是否成功 for (int i=0;i<vectorSize;++) bitVector[i]=0; /初始化 }; 12
构造函数的实现 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){ /读取集合元素X,X从0开始 int ad x/16; int id =x%16; unsigned short elem bit Vector[ad]; return ((elem >>(15-id))%2); ; 13
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 x/16; int id x%16; unsigned short elem bit Vector[ad]; unsigned short temp elem >>(15-id); elemelem <<(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> 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){ assert (vectorSize ==R.vectorSize); bitSet temp (vectorSize); for (int i=0;i<vectorSize;i+) temp.bitVector[i]bit Vector[i]R.bit Vector[i]; return temp;∥按位求"或",由第三个集合返回 } 15
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