...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Symmetric difference |
interval |
interval |
element |
element |
---|---|---|---|---|
|
||||
|
||||
|
||||
|
Functions and operators that implement symmetric difference on icl objects are given in the table above.
Description of symmetric difference |
|
---|---|
|
|
|
|
Symmetric difference is implemented on interval containers
by the function T&
flip(T&, const P& operand)
.
flip(y,x)
deletes every element of y
,
if it is contained in x
.
Elements of x
not contained
in y
are added. For icl
containers flip is also availabel as memeber function T& T::flip(const P& operand)
.
The admissible combinations of types for member function T& T::flip(const P&)
can be summarized in the overload table
below:
/* overload table for */ T\P| e i b p T& T::flip(const P&) ---+-------- T& flip(T&, const P&) s | s m | m S | S S M | M M
The next table contains complexity characteristics for functions flip
.
Table 1.37. Time Complexity for member functions flip on icl containers
|
domain |
interval |
domain |
interval |
---|---|---|---|---|
O(log n) |
||||
O(log n) |
||||
O(log n) |
O(n) |
|||
O(log n) |
O(n) |
|||
O(log n) |
O(n) |
The overload tables below are giving admissible type combinations for
operator ^=
that implements symmetric difference.
// overload tables for element containers: interval containers: T& operator ^= (T&, const P&) ^= | e b s m ^= | e i b p S M ---+-------- ---+------------ s | s s S | S S S m | m m M | M M M
Complexity characteristics for inplace operators that implement symmetric difference are given by the next tables where
n = iterative_size(y); m = iterative_size(x); //if P is a container
Table 1.39. Time Complexity for inplace symmetric difference on interval containers
|
domain |
interval |
domain |
interval |
interval |
interval |
---|---|---|---|---|---|---|
interval_sets |
O(log n) |
O(n) |
O(m log(n+m)) |
|||
interval_maps |
O(log n) |
O(n) |
O(log n) |
O(n) |
O(m log(n+m)) |
O(m log(n+m)) |
For the infix version of symmetric difference the following overloads are available:
// overload tables for element containers: interval containers: T operator ^ (T, const P&) ^ | e b s m ^ | e i b p S1 S2 S3 M1 M3 T operator ^ (const P&, T) ---+-------- ---+--------------------------- e | s e | S1 S2 S3 b | m i | S1 S2 S3 s | s s b | M1 M3 m | m m p | M1 M3 S1 | S1 S1 S1 S2 S3 S2 | S2 S2 S2 S2 S3 S3 | S3 S3 S3 S3 S3 M1 | M1 M1 M1 M3 M3 | M3 M3 M3 M3
To resolve ambiguities among interval containers the finer container type is chosen as result type.
See also . . .
Back to section . . .