For 循环集合 - 获取下一个元素迭代器

Posted

技术标签:

【中文标题】For 循环集合 - 获取下一个元素迭代器【英文标题】:For loop on set - get next element iterator 【发布时间】:2018-10-31 15:07:45 【问题描述】:

如果我在一个集合上循环,并且我想获取当前元素迭代器和下一个元素迭代器,不使用 next() 怎么办?

for(auto it = setOfObjects().begin(); it != setOfObjects().end(); )
            auto current = *it;
            auto next = // ?


【问题讨论】:

为什么不跟踪currentprevious 好主意,怎么样? 这是作业吗?请解释一下你在做什么。 如果你想向前看,你需要增加迭代器,确保它仍然不是 end 并取消引用它。另外,请记住,您当前的 for 循环是无限的。 我调用了一个将当前对象和下一个对象作为参数的方法。但是当我在做 *next(it) 时,它是 nullprt ... 【参考方案1】:

我认为您只需在代码中添加另一个迭代器prev,逻辑将是:

set<int> setOfObjects;
for(auto it = setOfObjects.begin(), previt = it++ ; it != setOfObjects.end(); ++it, ++previt)
  auto prev = *previt;  //which is current
  auto current = *it;   //and this was next

【讨论】:

【参考方案2】:

可以用与指针算术相同的方式检查迭代器,如下所示

auto next = *(it + 1);

请注意,这将需要对 current 是最后一个元素的情况进行一些处理,这样您就不会越过迭代器

【讨论】:

如果it 不是RandomAccessIterator 则不起作用,例如对于std::map

以上是关于For 循环集合 - 获取下一个元素迭代器的主要内容,如果未能解决你的问题,请参考以下文章

Iterator迭代器与增强for循环

Java 集合框架迭代器(Iterator)

使用Iterator迭代器循环集合

java 15-4 集合的专用遍历工具 迭代器

python -- 迭代器

Java学习之集合框架的迭代器--Iteratorjk及ListItertor接口