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 = // ?
【问题讨论】:
为什么不跟踪current
和previous
?
好主意,怎么样?
这是作业吗?请解释一下你在做什么。
如果你想向前看,你需要增加迭代器,确保它仍然不是 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 循环集合 - 获取下一个元素迭代器的主要内容,如果未能解决你的问题,请参考以下文章