std::unordered_set::erase() 有 3 个重载:在一个引用中,传递一个“无效”值,即集合中不存在的值,简单地使 erase() 返回 0。但是呢?另外两个重载?
C++11 标准是否说明在这种情况下擦除()应该做什么,或者它取决于编译器?它应该返回 end() 还是未定义的行为?
我在规范、cppreference.com、cplusplus.com 中找不到答案。在 IBM 网站上,他们说如果操作后没有元素剩余,它会返回 end(),但是如果操作本身由于无效的迭代器而失败会发生什么?
通常,在这些情况下,STL 容器的 erase() 方法是否只是具有未定义的行为?(所以我需要在将任何迭代器传递给擦除()之前检查我的迭代器,或者使用 unordered_set::erase() 重载,它采用 value_type 引用,如果失败,它将简单地返回 0)