For your specific example, they are equivalent. And since they are equivalent, you naturally want to prefer the shortest version which happens to also be the least error-prone -- for free.
The range-for loop was also proposed to be shortened furthermore to:
for ( var : range )
where var would have type auto&& (aka forwading/universal reference), which is the best way to take a reference to an object. Just auto var will make a copy of each element, which might not be cheap. Unfortunately, it did not pass.
You typically don't work with iterators directly so range-for you should be your first choice. Explicit iterators may also point to out-of-range elements since you can freely move in the range, leading to undefined behavior.
autoin the range-based for-loop you're getting a copy of your vector elements, which, if your object is expensive to copy, may yield unwanted performance issues. With the use of iterators you get back a const reference, so the copies don't happen here. A way to get back a const reference in the range-based for isfor (const auto& c : vc) ...