Hi
Can anybody tell me how to increment the iterator by 2 times.
iter++ is available - I have to do iter+2 how can I achieve this.
Hi
Can anybody tell me how to increment the iterator by 2 times.
iter++ is available - I have to do iter+2 how can I achieve this.
std::advance( iter, 2 );
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)
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.
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.