关于stl sgi map的一点体会

来源:互联网 发布:生日礼物淘宝 编辑:程序博客网 时间:2024/05/07 10:13

比较详细的研究了sgi map

 

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

 

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

 

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