用CGAL循环器迭代时擦除第一个元素

问题描述 投票:0回答:1

我有一个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在删除第一个元素之后指向以前的第二个元素/现在的第一个元素?

我该如何处理这个案子?谢谢!

c++11 iterator cgal erase
1个回答
0
投票

--start工作之前使用do

© www.soinside.com 2019 - 2024. All rights reserved.