STL(7) list

源代码分析GNU 2.9

存储对象

list中唯一存储的东西就是一个node 这个node是link_type类型,而link_type被定义为是list_node*
也就是说,node存的是一个指向list_node的指针,4个字节(32位下)
所以,如果sizeof(list())=4

list_node的设计

100w元素,分配时同时分配指针

两个指针指向void* 需要正确的类型转换,在gnu c4.9中有优化

iterator

要求

由于链表在内存中不连续
所以需要将iterator的++改写为iterator当前指向的下一个
iterator必须是一个class来让其更智能

用法

源代码



有着大量的操作符重载来模拟指针的行为
需要记住,在代码中,有些操作符已经被重载了

不允许后++两次,所以这个类要向整数看齐,模仿

源代码分析GNU 4.9

可以看到有如下改变

  1. iterator的模板参数只有一个,在iterator的结构中改写为指针和引用,更加容易理解
  2. node成员的type比较精确

类继承关系更加复杂

sizeof变为8

posted @ 2023-09-09 02:45  LiviaYu  阅读(13)  评论(0)    收藏  举报