当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《什么是非空STL擦除的安全等价物?》经验,为你挑选了1个好方法。

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

// i is an iterator
i = hash_map.erase(i)

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

hash_map.erase(i++)

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



1> Chris Jester..:

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

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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有