什么是非空STL擦除的安全等价物?

Paw*_*dan 4 c++ iterator stl hashmap

假设我有一个hash_map和一个代码

// i is an iterator
i = hash_map.erase(i)
Run Code Online (Sandbox Code Playgroud)

但GCC的STL并没有在擦除中返回迭代器,而是一个空白.现在是一个类似的代码

hash_map.erase(i++)
Run Code Online (Sandbox Code Playgroud)

安全(即不会使迭代器无效或做任何其他意外或不愉快的事情)?请注意这是一个hash_map.

Chr*_*ung 6

是的,这是安全的,因为在i擦除当前值之前,将已将值设置为下一个值.

根据SGI关于散列容器的文档,对于未擦除的元素不会发生失效,甚至也不会调整大小(没有关于插入是否会导致调整大小的说法,所以要小心我承认这是一种可能性)---但是在后一种情况,迭代顺序将被更改.但这不适用于此,除非您在遍历或其他事情期间不遗余力地调整容器大小.:-)