Standard C++ Library Reference ISO/IEC (VERSION3)

(++N), and have the object compare equal to B after a finite number of increments (N ==
B).
The phrase ``each N in the range [A, B)'' means that N begins with the value A and is
incremented zero or more times until it equals the value B. The case N == B is not in the
range.
The phrase ``the lowest value of N in the range [A, B) such that X'' means that the
condition X is determined for each N in the range [A, B) until the condition X is met.
The phrase ``the highest value of N in the range [A, B) such that X'' usually means
that X is determined for each N in the range [A, B). The function stores in K a copy of
N each time the condition X is met. If any such store occurs, the function replaces the
final value of N (which equals B) with the value of K. For a bidirectional or
random-access iterator, however, it can also mean that N begins with the highest value in
the range and is decremented over the range until the condition X is met.
Expressions such as X - Y, where X and Y can be iterators other than random-access
iterators, are intended in the mathematical sense. The function does not necessarily
evaluate operator- if it must determine such a value. The same is also true for
expressions such as X + N and X - N, where N is an integer type.
Several algorithms make use of a predicate that performs a pairwise comparison, such as with
operator==, to yield a bool result. The predicate function operator==, or any
replacement for it, must not alter either of its operands. It must yield the same boolresult every
time it is evaluated, and it must yield the same result if a copy of either operand is substituted
for the operand.
Several algorithms make use of a predicate that must impose a strict weak ordering on pairs of
elements from a sequence. For the predicate pr(X, Y):
pr(X, X) is false (X can't be ordered before itself)
X and Y have an equivalent ordering if !pr(X, Y) && !pr(Y, X) (X == Y need
not be defined)
pr(X, Y) && pr(Y, Z) implies pr(X, Z) (ordering is transitive)
Some of these algorithms implicitly use the predicate X < Y, and some use a predicate pr(X,
Y) passed as a function object. Predicates that satisfy the ``strict weak ordering'' requirement
are X < Y and X > Y for the arithmetic types and for string objects. Note, however, that
predicates such as X <= Y and X >= Y for these same types do not satisfy this requirement.
A sequence of elements designated by iterators in the range [first, last) is ``a sequence
ordered by operator<'' if, for each N in the range [0, last - first) and for each M
in the range (N, last - first) the predicate !(*(first + M) < *(first +
N)) is true. (Note that the elements are sorted in ascending order.) The predicate function
operator<, or any replacement for it, must not alter either of its operands. It must yield the
same boolresult every time it is evaluated, and it must yield the same result if a copy of either
operand is substituted for the operand. Moreover, it must impose a strict weak ordering on the
operands it compares.