目前我正在尝试从一个集合中删除一系列迭代器,但是 GCC 的标准库似乎被破坏了,因为 std::set::erase(iterator) 应该返回一个迭代器(下一个迭代器),但是在 GCC 中它返回 void(这是标准的?)
无论如何我想写:
myIter = mySet.erase(myIter);
但是 GCC 不喜欢它... 那么这样写安全吗?
mySet.erase(myIter++);
编辑:是的,我正在检查 mySet.end();
最佳答案
没有问题
mySet.erase(myIter++);
操作顺序明确:myIter 被复制到 myTempIter,myIter 递增,然后 myTempIter 被提供给 erase 方法。
对于 Greg 和 Mark:不,operator++ 无法在调用 erase 之后执行操作。根据定义,erase() 在 operator++ 返回后被调用。
关于c++ - 将迭代器用作参数时在内部增加迭代器是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/161166/