1) Is there a "good" reason why there isn't alread an overload for std::max_element that takes a vector and assumes first = std::begin(v) and last = std::end(v), in <algorithm> itself ?
2) Is there a suggestion box for developers of the C++ language ? To add this suggestion to it?
One issue is that std::end() and std::begin() as free functions didn't exist until C++11. But still, come C++11, they could have added a template overload that took in the container itself, so this isn't really an excuse.
But the thing is, the functions in <algorithm> are intended to make functionality like that reusable as much as possible, with little bloat. All the functionality that you need is already provided in the current max_element function template, so the standard library committee didn't feel the need to add more onto that.
There's more reasons listed in the link above, so as also being able to do reverse iteration on a container.
(2) Please see: https://isocpp.org/std/submit-a-proposal
(But as Peter said, apparently boost's version of this is being integrated with the standard after all!)