假设我有一个hash_map和一个代码
// i is an iterator i = hash_map.erase(i)
但GCC的STL并没有在擦除中返回迭代器,而是一个空白.现在是一个类似的代码
hash_map.erase(i++)
安全(即不会使迭代器无效或做任何其他意外或不愉快的事情)?请注意这是一个hash_map.
是的,这是安全的,因为在i
擦除当前值之前,将已将值设置为下一个值.
根据SGI关于散列容器的文档,对于未擦除的元素不会发生失效,甚至也不会调整大小(没有关于插入是否会导致调整大小的说法,所以要小心我承认这是一种可能性)---但是在后一种情况,迭代顺序将被更改.但这不适用于此,除非您在遍历或其他事情期间不遗余力地调整容器大小.:-)