template <class T> bitSet<T>&bitSet<T>: /求集合this与R的交 operator *(const bitSet<T>&R){ assert (vectorSize =R.vectorSize); bitSet temp (setSize); for (int i=0;i<vectorSize;i++) temp.bit Vector[i]bit Vector[i]&R.bit Vector[i]; return temp;∥按位求“与”,由temp返回 16
template <class T> bitSet<T>& bitSet<T>:: //求集合this与R的交 operator * (const bitSet<T>& R) { assert (vectorSize == R.vectorSize); bitSet temp (setSize); for (int i = 0; i < vectorSize; i++) temp.bitVector[i] = bitVector[i] & R.bitVector[i]; return temp; //按位求“与”, 由temp返回 }; 16
template <class T> bitSet<T>&bitSet<T>: /求集合this与R的差 operator -(const bitSet<T>&R) assert (vectorSize =-R.vectorSize); bitSet temp (setSize); for (int i=0;i<vectorSize;i++) temp.bit Vector[i]=bit Vector[i]&R.bitVector[i]); return temp; 川由第三个集合返回 }; 17
template <class T> bitSet<T>& bitSet<T>:: //求集合this与R的差 operator - (const bitSet<T>& R) { assert (vectorSize == R.vectorSize); bitSet temp (setSize); for (int i = 0; i < vectorSize; i++) temp.bitVector[i] = bitVector[i] & (~R.bitVector[i]); return temp; //由第三个集合返回 }; 17
集合的并 this 01110000110 R 00100101010 temp 01110101110 集合的交 this 01110000110 R 00100101010 temp 00100000010 集合的差 this 011100 00110 R 0 01 1010 temp 01010000100 18
18 this R temp 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 this R temp 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 this R temp 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 集合的并 集合的交 集合的差
template <class T> bool bitSet<T>:subSet (bitSet<T>&R) /判this是否R的子集 assert (setSize ==R.setSize); for(inti=O;i<vectorSize;i++)/按位判断 if (bit Vector[i]&R.bit Vector[i))return false; return true; } this 00111010110 R 991199919 19
template <class T> bool bitSet<T>::subSet (bitSet<T>& R) { //判this是否R的子集 assert (setSize == R.setSize); for (int i = 0; i < vectorSize; i++) //按位判断 if (bitVector[i] & (~R.bitVector[i])) return false; return true; }; 19 this R 0 0 1 1 1 0 1 0 1 1 0 0 0 1 1 1 0 0 1 0 1 0 1 1 0 0 0 1 1 0 1 0 1
template <class T> bool bitSet<T>:operator ==(bitSet<T>&R) /判集合this与R相等 if (vectorSize !=R.vectorSize)return false; for (inti=0;i<vectorSize;i++) if (bit Vector[i]!=R.bitVector[]) return false; return true; /川对应位全部相等 }; this 00110000110 R00100101010 (i 20
template <class T> bool bitSet<T>::operator == (bitSet<T>& R) { //判集合this与R相等 if (vectorSize != R.vectorSize) return false; for (int i = 0; i < vectorSize; i++) if (bitVector[i] != R.bitVector[i]) return false; return true; //对应位全部相等 }; 20 this R 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 0 1 0 i