c++ - 将迭代器用作参数时在内部增加迭代器是否安全?

标签 c++ iterator

目前我正在尝试从一个集合中删除一系列迭代器,但是 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/

相关文章:

c++ - 使库名称成为 make 中包含路径的一部分?

python - 需要从 python 列表中找到子元素

c++ - 我如何抽象出在遗留代码中使用 RogueWave?

c++ - 如何使用 C++ 压缩文件目录?

c++ - 使用 C++ AMP 处理大型数组(65536+ 个元素)

Java在决定是否删除对象之前迭代map两次

c++ - C++自定义迭代器const转换正确完成

C++ 指针和内存释放

c++ - g++ - 无法链接到使用 VS2012 构建的静态库

C++类继承设计选择