目前我正在尝试从集合中擦除一系列迭代器,但是GCC的标准库似乎被破坏了,因为std :: set :: erase(iterator)应该返回一个迭代器(下一个迭代器),但是在GCC中它返回void (这是标准的吗?)
无论如何我想写:
myIter = mySet.erase(myIter);
但GCC不喜欢它......所以写这个是否安全?
mySet.erase(myIter++);
编辑:是的我正在检查mySet.end();
没有问题
mySet.erase(myIter++);
操作顺序是明确定义的:myIter被复制到myTempIter中,myIter递增,然后myTempIter被赋予擦除方法.
对于Greg和Mark:不,在调用erase之后,operator ++无法执行操作.根据定义,在operator ++返回后调用erase().