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

可以看到有如下改变
- iterator的模板参数只有一个,在iterator的结构中改写为指针和引用,更加容易理解
- node成员的type比较精确

类继承关系更加复杂
sizeof变为8

浙公网安备 33010602011771号