Quick A: Are equivalent, but
shrink_to_fit mark the intention.
Recently on SO:
The swap trick isn't actually constant-time. The cost of performing the actual swap is indeed O(1), but then there's the cost of the
std::vectordestructor firing and cleaning up all the allocated space. That can potentially have cost Ω(n) if the underlying objects have nontrivial destructors, since the
std::vectorneeds to go and invoke those destructors. There's also the cost of invoking the copy constructors for all the elements stored in the initial vector, which is similarly Ω(n).
As a result, both approaches should have roughly the same complexity, except that
shrink_to_fitmore clearly telegraphs the intention and is probably more amenable to compiler optimizations.