Can anybody tell me how to increment the iterator by 2?
iter++ is available - do I have to do iter+2? How can I achieve this?
Can anybody tell me how to increment the iterator by 2?
iter++ is available - do I have to do iter+2? How can I achieve this?
This method will work for iterators that are not random-access iterators but it can still be specialized by the implementation to be no less efficient than iter += 2 when used with random-access iterators.
http://www.cplusplus.com/reference/std/iterator/advance/
std::advance(it,n);
where n is 2 in your case.
The beauty of this function is, that If "it" is an random access iterator, the fast
it += n
operation is used (i.e. vector<,,>::iterator). Otherwise its rendered to
for(int i = 0; i < n; i++)
++it;
(i.e. list<..>::iterator)
If you don't know wether you have enough next elements in your container or not, you need to check against the end of your container between each increment. Neither ++ nor std::advance will do it for you.
if( ++iter == collection.end())
... // stop
if( ++iter == collection.end())
... // stop
You may even roll your own bound-secure advance function.
If you are sure that you will not go past the end, then std::advance( iter, 2 ) is the best solution.
The very simple answer:
++++iter
The long answer:
You really should get used to writing ++iter instead of iter++. The latter must return (a copy of) the old value, which is different from the new value; this takes time and space.
Note that prefix increment (++iter) takes an lvalue and returns an lvalue, whereas postfix increment (iter++) takes an lvalue and returns an rvalue.