Also consider that the functionality is kind of built into std::vector already (given a size() function), so passing in an empty temporary vector as suggested by Ameise is a pretty good idiom (no dynamic allocations happening there, fear not).
Since you pass a vector of Entity*, it is likely that the code you envision will look something like:
void foo(vector<Entity*> &e)
{
if(e != null_vector_ref)
for(auto elem& : e)
{
elem->blah();
...
}
}
If there are simply no elements inside the vector, that loop will execute zero times, with or without an explict check. Since the branch for the explicit check is not free, this is most likely even more efficient. Or, you could just do if(!e.size()) if you definitively wish to be explicit, or if your function is a little more complicated and contains several loops.