目前,我正在尝试从集合中删除一系列迭代器,但是GCC的标准库似乎已损坏,因为std::set::erase(iterator)应该返回迭代器(下一个迭代器),但是在GCC中,它返回void (这是标准的?)

无论如何我想写:

myIter = mySet.erase(myIter);

但海湾合作委员会不喜欢它...
那么写这个安全吗?
mySet.erase(myIter++);

编辑:是的,我正在检查mySet.end();

最佳答案

没问题

mySet.erase(myIter++);

操作顺序是明确定义的:将myIter复制到myTempIter中,将myIter递增,然后将myTempIter提供给擦除方法。

对于Greg和Mark :不,在擦除后,operator ++无法执行任何操作。根据定义,在operator ++返回之后将调用擦除()。

08-15 22:41