使用擦除方法时,迭代器何时以及如何在映射中失效?
例如 :
std :: map < int , int > aMap ;
aMap [ 33 ] = 1 ;
aMap [ 42 ] = 10000 ;
aMap [ 69 ] = 100 ;
aMap [ 666 ] = -1 ;
std :: map < int , int > :: iterator itEnd = aMap.lower_bound ( 50 ) ;
for ( std :: map < int , int > :: iterator it = aMap.begin ( ) ;
it != itEnd ;
// no-op
)
{
aMap.erase ( it ++ ) ;
}
被擦除的迭代器肯定会变得无效(它在仍然有效的同时会增加)
但其他人呢?
如果我没记错的话,标准说映射必须是平衡二叉树或具有同等键搜索复杂性的结构
如果地图是用树实现的,我可以假设未擦除的迭代器仍然有效吗?
实现地图的其他可能方法怎么样?
只有被擦除的迭代器是无效的,其余的由标准保证保持有效。
See 迭代器失效规则 https://stackoverflow.com/questions/6438086/iterator-invalidation-rules/6438087#6438087
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)