|
|
template <class T> T* set_diff( const T* b1, const T* e1, const T* b2, const T* e2, T* b3 ); template <class T> T* set_diff_r( int (*rel)(const T*,const T*), const T* b1, const T* e1, const T* b2, const T* e2, T* b3 );
(1) For the plain version, T::operator< defines a total ordering relation on T and both input arrays are sorted w.r.t. that relation.
(2) For the relational version, rel defines a total ordering relation on T and both input arrays are sorted w.r.t. that relation.
(3) Neither of the input arrays has repetitions.
(4) The output array does not overlap either of the two input arrays.
(5) The output array has enough cells to hold the result.
(6) T has operator=.
These functions put elements from two sorted arrays with no repetitions into a new sorted array with no repetitions such that every element which is in the first array but not in the second will be placed in the new array. They return a pointer to the cell just beyond the last element of the new array.
template <class T> T* set_diff( const T* b1, const T* e1, const T* b2, const T* e2, T* b3 );
Uses T::operator< for comparing elements.
template <class T> T* set_diff_r( int (*rel)(const T*,const T*), const T* b1, const T* e1, const T* b2, const T* e2, T* b3 );
Uses rel for comparing elements.
If N and M are the sizes of the arrays, then complexity is O(N+M). At most N+M-1 comparisons and N assignments are done.
All functions whose names begin with set_ treat arrays as sets (they share assumptions 1-3). These all have linear time complexity, which may unacceptable for large sets. As an alternative, consider using Set(3C++) or Bits(3C++) (if T is int).
Because a Block (see Block(3C++)) can always be used wherever an array is called for, Array Algorithms can also be used with Blocks. In fact, these two components were actually designed to be used together.