使用CGAL循环器进行擦除时擦除第一个元素

时间:2019-04-02 14:27:26

标签: c++11 iterator cgal erase

我有一个CGAL::Polygon_2<Kernel>,并使用CGAL顶点circulator在其顶点上进行迭代。在CGAL文档中,我找不到有关如何正确使用擦除功能的任何信息。 在中间删除不是问题,但是在删除循环器的第一个元素时如何处理循环器?

朴素的iterator erasing approach仅在第一种情况下有效,在第二种情况下,循环在一次迭代后完成。

// p is of type CGAL::Polygon_2<Kernel>
auto ci = p.vertices_circulator();
auto start = ci;
int i = 0;

do {
  if (i == 0) {
    ci = p.erase(ci);
  } else {
    ++ci;
  }
  ++i;     
} while (ci != start);

这意味着start是在擦除第一个元素之后指向以前的第二个元素/现在是第一个元素吗?

该如何处理? 谢谢!

1 个答案:

答案 0 :(得分:0)

--start之前可以使用do