Skip_over() algorithm
A few comments:


Algorithms typically use the names first and last for the iterators they take, not begin and end (in common usage, begin and end refer specifically to the iterators that delimit a range in a container).
The use of find_if seems a bit excessive:  yes, it is good to use the Standard Library algorithms, but if you are writing your own algorithm, you may as well just write a loop, especially if it makes the code much clearer.
With respect to template parameter naming, it is helpful if you say what category of iterator is required; this helps to document the algorithm.


Consider the following, alternative implementation:

template &lt;typename ForwardIterator, typename T&gt;
ForwardIterator skip_over(ForwardIterator first, ForwardIterator last, T const&amp; x)
{
    while (first != last &amp;&amp; *first == x)
        ++first;

    return first;
}