Summary
The Standard Template Library has a generic algorithm for (almost) every desire. If you're doing something algorithmic, check the STL first!
STL algorithms deal in the half-open ranges defined by pairs of iterators. Be careful when dealing with any of the one-and-a-half-range algorithms.
STL algorithms that deal with comparison and sorting will use operator<
by default, but you can always pass a two-argument "comparator" instead. If you want to perform a non-trivial operation on a whole range of data, remember that the STL might support it directly (std::move
, std::transform
) or indirectly via a special iterator type (std::back_inserter
, std::istream_iterator
).
You should know what a "permutation" is, and how the standard permutative algorithms (swap
, reverse
, rotate
, partition
, sort
) are implemented in terms of one another. Just three STL algorithms (stable_sort
, stable_partition
, inplace_merge
) may quietly allocate memory from the heap; if you can't afford heap allocation, avoid...