There are 2 iterators to the sets of the same type:
typename TFunction <T>::Type ::const_iterator i1 = f1.begin();
typename TFunction <T>::Type ::const_iterator i2 = f2.begin();
After several steps i1 points to some element of f1 having index = index1 (it may not be known). I need to set the second iterator i2 to the element of f2 having the equal index as index1...
Can this be done without a conversion of i1 to the index?
Use std::advance
as:
std::advance(it2, index1); //increments it2 index1 times!
Done!
If you dont know the value of index1
, then you can always compute it using the current it1
as:
auto index1 = std::distance(f1.begin(), it1);
:-)
Note that std::advance
returns void
so you cannot write this:
fun(f2.begin(), std::advance(it2, index1)); //error
Instead if you have to write this:
std::advance(it2, index1); //first advance
fun(f2.begin(), it2); //then use it
So to ease such usages, std::next
is added in C++11:
fun(f2.begin(), std::next(f2.begin(), index1)); //ok, don't even need it2!
BTW, in C++11, you could use auto
instead of typename thingy:
auto it1 = f1.cbegin(); //cbegin() returns const_iterator
auto it2 = f2.cbegin(); //cbegin() returns const_iterator
Hope that helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With