Superimposed on any other classification of the algorithms is a set of parameter conventions. Understanding these parameter conventions can aid in learning new algorithms—by knowing what the parameters mean, you can concentrate on understanding the operation the algorithm performs. Most of the algorithms have one of the following four forms:
alg(beg, end, other args);
alg(beg, end, dest, other args);
alg(beg, end, beg2, other args);
alg(beg, end, beg2, end2, other args);
where alg is the name of the algorithm, and beg
and end
denote the input range on which the algorithm operates. Although nearly all algorithms take an input range, the presence of the other parameters depends on the work being performed. The common ones listed here—dest
, beg2
, and end2
—are all iterators. When used, these iterators fill similar roles. In addition to these iterator parameters, some algorithms take additional, noniterator parameters that are algorithm specific.
A dest
parameter is an iterator that denotes a destination in which the algorithm can write its output. Algorithms assume that it is safe to write as many elements as needed.
Algorithms that write to an output iterator assume the destination is large enough to hold the output.
If dest
is an iterator that refers directly to a container, then the algorithm writes its output to existing elements within the container. More commonly, dest
is bound to an insert iterator (§ 10.4.1, p. 401) or an ostream_iterator
(§ 10.4.2, p. 403). An insert iterator adds new elements to the container, thereby ensuring that there is enough space. An ostream_iterator
writes to an output stream, again presenting no problem regardless of how many elements are written.
Algorithms that take either beg2
alone or beg2
and end2
use those iterators to denote a second input range. These algorithms typically use the elements from the second range in combination with the input range to perform a computation.
When an algorithm takes both beg2
and end2
, these iterators denote a second range. Such algorithms take two completely specified ranges: the input range denoted by [beg, end)
, and a second input range denoted by [beg2, end2)
.
Algorithms that take only beg2
(and not end2)
treat beg2
as the first element in a second input range. The end of this range is not specified. Instead, these algorithms assume that the range starting at beg2
is at least as large as the one denoted by beg, end
.