Q:

Why are there no capacity argument in the constructors for the containers?

If I want to set the capacity to a std::vector I have to call .reserve(...), are there any reason why there is not a capacity argument in the constructor for the containers in stl, std::string, std::vector?

A:

There is one obvious reason:  what would such a constructor look like?  
All of the sequence containers already have a constructor that can be called with a single integer argument.  That constructor resizes the container to have the specified number of elements.  
Yes, you could add a second parameter (like bool reserve_instead_of_resize) to be able to use this constructor for both initial resizes and initial reserves, but then I think the end result would be confusing.

A:

You could simply make a function for creating a reserved vector:
// make_reserved_vector
template <typename... T>
std::vector<T...> make_reserved_vector(size_t n) {
    std::vector<T...> vec;
    vec.reserve(n);
    return vec;
}

and use as:
auto myvec = make_reserved_vector<int>(32768);

