Iterator categories
Let's revisit the count
and count_if
functions that we introduced inChapter 1, Classical Polymorphism and Generic Programming. Compare the function template definition in this next example to the similar code from that chapter; you'll see that it's identical except for the substitution of a pair of Iterators
(that is, an implicitly defined range) for the Container&
parameter--and except that I've changed the name of the first function from count
to distance
. That's because you can find this function, almost exactly as described here, in the Standard Template Library under the name std::distance
and you can find the second function under the name std::count_if
:
template<typename Iterator> int distance(Iterator begin, Iterator end) { int sum = 0; for (auto it = begin; it != end; ++it) { sum += 1; } return sum; } template<typename Iterator, typename Predicate> int count_if(Iterator begin, Iterator end...