编程文汇

[c++]一边遍历一边删除

cxx
#1

How to remove element while iterating?

使用标准模板库的时候,想过这个问题吗?可能有人说做不到,实际上时可以的。

      //q_是个普通的队列,我们检测到符合条件的元素,就删除它。
      for (auto one = q_.begin(); one != q_.end();) {
        if (!exists(one->first)) {
          one = q_.erase(one); //删除函数的返回值是关键
        } else {
          one++;
        }
      }

其实这里的关键就是erase方法的返回值,它返回的时下一个位置的iterator,如果到了末尾会返回end,注意,这里不需要++,因为已经时下一个了。

这样 ,我们一遍循环就完成了检测、删除,很高效。