slist

一.slist概述

前面讲过的list是一个环状双向链表,而slist是一个普通的单向链表,slist与list的差别主要在于slist的迭代器是一个Forward Iterator,只能单向移动,由此slist的insert和erase效率都比较低(毕竟没办法往前移动,要找到前一个只有遍历了),所以slist有往后插入和删除的函数,同样的,基于效率考虑,slist没有push_back(要遍历),有push_front,所以进入的次序和实际的排列是反着的(感觉除了节省空间一点,这个slist用处不大啊)。

二.slist的节点

slist的节点设计比list复杂一些,先是设计了一个只有next指针基础节点,然后设计了一个继承基础节点又有data的节点。,这样某些操作只涉及基础节点。

三.slist的迭代器

slist的迭代器设计也比list复杂,先设计了一个基础迭代器,基础迭代器里面有指向基础节点的指针和重载== !=函数。然后设计了继承基础迭代器的迭代器,这个里面又设计了一个不同于基础迭代器中指针的指向高级节点的指针(即它有两个指针了),然后重载运算符,不过没有重载== !=运算符。

四.slist的数据结构

数据结构没啥好说的,不过可以从数据结构的操作中看出为什么要把节点和迭代器分成两层,这样做主要是为了在执行一些操作的时候只操作指针而不管数据域什么事。

五.slist的元素操作

这个,也没啥好说的,因为只给出了一个示例程序用了几个函数,并没有给出函数具体是怎么实现的,所以大致就那样吧。

六.小结

slist是单向列表,不在STL标准规格之内(属于SGI STL),除了本身数据结构与list不同,主要是节点和迭代器的实现有两重,使得进行某些操作时只操作数据域即可。

你可能感兴趣的:(《STL源码剖析》笔记,链表,数据结构,c++)