Thinking in C++ Vol 2 - Practical Programming |

Prev |
Home |
Next |

The Standard C++ library classifies a function object based
on the number of arguments its **operator( )** takes and the kind of value
it returns. This classification is based on whether a function object s **operator( )**
takes zero, one, or two arguments:

**Generator**: A type of function object that takes no
arguments and returns a value of an arbitrary type. A random number generator
is an example of a generator. The standard library provides one generator, the
function **rand( )** declared in **<cstdlib>**, and has some
algorithms, such as **generate_n( )**, which apply generators to a
sequence.

**Unary Function**: A type of function object that takes
a single argument of any type and returns a value that may be of a different
type (which may be **void**).

**Binary Function**: A type of function object that takes
two arguments of any two (possibly distinct) types and returns a value of any
type (including **void**).

**Unary Predicate**: A Unary Function that returns a **bool**.

**Binary Predicate**: A Binary Function that returns a **bool**.

**Strict Weak Ordering**: A binary predicate that allows for a more general interpretation of equality. Some of the standard containers
consider two elements equivalent if neither is less than the other (using **operator<( )**).
This is important when comparing floating-point values, and objects of other
types where **operator==( )** is unreliable or unavailable. This notion
also applies if you want to sort a sequence of data records (**struct**s) on
a subset of the **struct** s fields. That comparison scheme is considered a
strict weak ordering because two records with equal keys are not really equal
as total objects, but they are equal as far as the comparison you re using is
concerned. The importance of this concept will become clearer in the next
chapter.

In addition, certain algorithms make assumptions about the
operations available for the types of objects they process. We will use the
following terms to indicate these assumptions:

**LessThanComparable**: A class that has a less-than **operator<**.

**Assignable**: A class that has a copy-assignment **operator=**
for its own type.

**EqualityComparable**: A class that has an equivalence **operator==** for its own type.

We will use these terms later in this chapter to describe
the generic algorithms in the standard library.

Thinking in C++ Vol 2 - Practical Programming |

Prev |
Home |
Next |