This question is related with item 16 of effective stl book which states that while using vector(lets assume vectorvec) instead of array in a legacy
vectorvec
Formally, one produces an iterator, and the other a pointer, but I think the major difference is that vec[0] will do bad stuff if the vector is empty, while vec.begin() will not.
vec[0]
vec.begin()