gpt4 book ai didi

c++ - 如何使迭代器指向与 C++ 集中的另一个元素相同的元素?

转载 作者:太空狗 更新时间:2023-10-29 20:26:53 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

std::advance 用作:

std::advance(it2, index1); //increments it2 index1 times!

完成!

如果您不知道 index1 的值,那么您总是可以使用 current 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!

顺便说一句,在 C++11 中,你可以使用 auto 而不是 typename 东西:

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

希望对您有所帮助。

关于c++ - 如何使迭代器指向与 C++ 集中的另一个元素相同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18012372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com