同一类型的集合有2个迭代器:
typename TFunction <T>::Type ::const_iterator i1 = f1.begin();
typename TFunction <T>::Type ::const_iterator i2 = f2.begin();
在几个步骤之后,i1指向具有index = index1的f1的某个元素(可能不知道)。我需要将第二个迭代器i2设置为具有与index1相同索引的f2元素...
这可以在没有将i1转换为索引的情况下完成吗?
答案 0 :(得分:5)
将std::advance
用作:
std::advance(it2, index1); //increments it2 index1 times!
完成!
如果你不知道index1
的价值,那么你总是可以使用当前 it1
来计算它:
auto index1 = std::distance(f1.begin(), it1);
: - )
请注意,std::advance
会返回void
,因此您无法写下此内容:
fun(f2.begin(), std::advance(it2, index1)); //error
相反,如果你必须写这个:
std::advance(it2, index1); //first advance
fun(f2.begin(), it2); //then use it
为了简化这种用法,在C ++ 11中添加了std::next
:
fun(f2.begin(), std::next(f2.begin(), index1)); //ok, don't even need it2!
BTW,在C ++ 11中,您可以使用auto
而不是typename thingy:
auto it1 = f1.cbegin(); //cbegin() returns const_iterator
auto it2 = f2.cbegin(); //cbegin() returns const_iterator
希望有所帮助。
答案 1 :(得分:1)
我不清楚您的索引是什么,但如果您已移动i1
,则可以使用std::distance
查看费用,然后使用std::advance
std::advance(i2, std::distance(f1.begin(), i1));
答案 2 :(得分:0)
使用std::advance(i2,index1)
推进i2
。