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

正义

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

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

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

是否可以在不将i1转换为索引的情况下完成此操作?

纳瓦兹

使用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中,您可以使用auto而不是类型名来代替:

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

希望能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过元素的属性将一个集合转换/转换为另一个集合?

如何检查一个集合是否仅包含来自另一个集合的元素?

如何在相同元素的另一个可变迭代内迭代可变元素?

如何从另一个方法中迭代的列表中删除元素?

C#-Selenium-Chromedriver-如何在与另一个类相同名称的类中查找元素

如何从另一个向量的另一个第一个元素减去向量中的第一个元素?

如何根据另一个集合的元素对集合进行特定排序?

如何在包含相同元素的另一个列表中找到一个列表的元素索引?

如何根据另一个列表中另一个元素的索引从列表中写出元素?

如何根据相同元素的另一个值在字典列表中搜索元素的值?

单击另一个元素时如何关闭另一个元素

如何从另一个数组中的多个元素中选择数组中的元素

SQL:如何声明一个集合中的任何元素都不能出现在另一个集合中?

如何点击一个元素并在另一个元素中添加文本

Laravel 访问另一个迭代器中的集合元素

如何选择另一个元素内的元素?

如何从另一个相同的向量中替换一个元素,但另一个向量不会改变?

没有另一个列表元素的 C# 列表(集合论,补充)

如何在scss中的另一个psedo元素中嵌套伪元素

如何仅删除所选元素中的一个元素,而保留另一个元素?

如何使页面中的元素与另一个元素完全相同的视觉宽度?

如何使用 jQuery 使元素的内容与另一个元素相同?

c++ - 如何定义指向另一个容器中元素的迭代器的值类型

单击同一 div 中的另一个元素后,如何选择特定元素

如何检查一个迭代中的哪些元素也在另一个中?

引用元素指向 C# 中的另一个引用元素

如何使 numpy 数组中的一个元素与不同 numpy 数组中的另一个元素共享相同的内存地址?

迭代一个集合并获得另一个集合的相同索引值

如何使用集合理解在集合中查找不在另一个集合中的单个元素