4

相同类型的集合有 2 个迭代器:

    typename TFunction <T>::Type ::const_iterator i1 = f1.begin();
    typename TFunction <T>::Type ::const_iterator i2 = f2.begin();

经过几个步骤后, i1 指向 f1 中 index = index1 的某个元素(可能未知)。我需要将第二个迭代器 i2 设置为 f2 的元素,该元素具有与 index1 相同的索引...

这可以在不将 i1 转换为索引的情况下完成吗?

4

3 回答 3

7

用作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

因此,为了简化这种用法,std::next在 C++11 中添加了:

fun(f2.begin(), std::next(f2.begin(), index1)); //ok, don't even need it2!

顺便说一句,在 C++11 中,您可以使用autotypename 来代替:

auto it1 = f1.cbegin(); //cbegin() returns const_iterator
auto it2 = f2.cbegin(); //cbegin() returns const_iterator

希望有帮助。

于 2013-08-02T08:41:59.150 回答
1

我不清楚你的索引是什么,但如果你已经移动了i1,你可以使用std::distance查看多少,然后使用std::advance

std::advance(i2, std::distance(f1.begin(), i1));
于 2013-08-02T08:51:33.617 回答
0

使用std::advance(i2,index1)前进i2

于 2013-08-02T08:41:33.633 回答