I found myself writing the following a lot:
int location =2;
vector vec;
vector::iterator it=vec.begin();
/..../
std::advance(it, location
Adding will only work with random access iterators. std::advance
will work with all sorts of iterators. As long as you're only dealing with iterators into vectors, it makes no real difference, but std::advance
keeps your code more generic (e.g. you could substitute a list
for the vector
, and that part would still work).
For those who care, the standard describes advance
and distance
as follows (§24.3.4/1):
Since only random access iterators provide + and - operators, the library provides two function templates
advance
anddistance
. These function templates use+
and-
for random access iterators (and are, therefore, constant time for them); for input, forward and bidirectional iterators they use++
to provide linear time implementations.
Also note that starting with C++11, the standard added a parameter to std::next
, so you can advance by a specified amount using it (and std::prev
similarly). The difference from std::advance
is that it returns the modified iterator (which std::advance
doesn't), which can be convenient in some cases.