Conventions
What are the rules and terminologies needed to run algorithms? Let's find out.
To use the algorithms, you have to keep a few rules in your head.
The algorithms are defined in various headers.
<algorithm>
:
Contains the general algorithms.
<numeric>
:
Contains the numeric algorithms.
Many of the algorithms have the name suffix
_if
and _copy
.
_if
:
The algorithm can be parametrized by a predicate.
_copy
:
The algorithm copies its elements in another range.
Algorithms like auto num = std::count(InpIt first, InpIt last, const T& val)
return the number of elements that are equal to val
. num
is of type iterator_traits<InpIt>::difference_type
. You have the guarantee that num
is sufficient to hold the result. Because of the automatic return type deduction with auto
, the compiler will give you the right types.
🔑 If the container uses an additional range, it has to be valid
The algorithm std::copy_if uses an iterator to the beginning of its destination range. This destination range has to be valid.
ℹ️ Naming conventions for the algorithms
I use a few naming conventions for the type of arguments and the return type of the algorithms to make them easier to read.
Name | Description |
---|---|
InIt |
[Input iterator] |
FwdIt |
[Forward iterator] |
BiIt |
[Bidirectional iterator] |
UnFunc |
[Unary callable] |
BiFunc |
[Binary callable] |
UnPre |
[Unary predicate] |
BiPre |
[Binary predicate] |
Search |
The searcher encapsulates the search algorithm. |
ValType |
From the input range automatically deduced value type. |
ExePol |
Execution policy |
Signature of the algorithms