【问题标题】:For loop on set - get next element iteratorFor 循环集合 - 获取下一个元素迭代器
【发布时间】: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 ...

标签: c++ iterator set next


【解决方案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
    猜你喜欢
    • 2018-03-02
    • 2011-02-11
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多