The first version
std::generate(numbers.begin(), numbers.end(), rand);
tells us that you want to generate a sequence of values.
In the second version the reader will have to figure that out himself.
Saving on typing is usually suboptimal, as it is most often lost in reading time. Most code is read a lot more than it is typed.