关于stl sgi map的一点体会

本文深入探讨了STL中map数据结构的迭代器稳定性原理。解释了即使在元素增删过程中,迭代器仍能保持有效的原因,除了被删除元素的迭代器。通过解析map迭代器的内部实现及红黑树节点调整机制,帮助读者理解这一特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比较详细的研究了sgi map

 

map 拥有和list的某些相同的性质:当用户对它进行元素的新增或者删除操作的时候,操作之前的所有迭代器,在操作完后都依然有效,当然,被删除的那个元素的迭代器必然是个例外。

 

其实map的迭代器就是一个结构体,里面只有一个元素就是指向rbtreebasenode的指针,由于是这个定义,所以在使用的时候完全可以随时将迭代器强制类型转换成rbtreenode的指针,而rbtreenode中也只有一个元素Value,于是这个迭代器就成了指向Value的指针了,就可以随时对Value进行操作了,而树本身每个结点都是由指针连接的在删除和插入结点的操作的时候,对于树结构的调整只是这些left parent right指针的指向的变化,而本身的结点的内存并没有发生改变,所以迭代器不会失效。

 

对于被删除的那个结点,由于其内存被释放,并且left right指针未做响应更新所以。。。该迭代器再做++或——操作的时候往往返回不了正确的值。(stl为啥不把left right等指针置为null????)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值