I have a set of type set<int>
and I want to get an iterator to someplace that is not the beginning.
I am doing the following:
set<int>::iterator it = myset.begin() + 5;
I am curious why this is not working and what is the correct way to get an iterator to where I want it.
myset.begin() + 5;
only works for random access iterators, which the iterators from std::set
are not.
For input iterators, there's the function std::advance
:
set<int>::iterator it = myset.begin();
std::advance(it, 5); // now it is advanced by five
In C++11, there's also std::next
which is similar but doesn't change its argument:
auto it = std::next(myset.begin(), 5);
std::next
requires a forward iterator. But since std::set<int>::iterator
is a bidirectional iterator, both advance
and next
will work.