以下代码中定义的LinkedListItr类真的有用吗,书上这样写是不是违背了抽象的原则。

这是std::list\u0026lt;T\u0026gt;::iterator,这种东西也不是不存在。但是既然不实现一个接口(譬如说C#里面的IEnumerable\u0026lt;T\u0026gt;),那把一个类写成这样没有什么实际价值。
■网友
1. 迭代器是把“遍历操作抽象出来供外部使用”。你这个例子的有个很大的问题是这个迭代器没有去实现一个更为抽象的迭代器接口(比如说java.util.Iterator)。导致所有使用这个迭代器的客户代码都只能基于这个具体类去写,事实上没有抽象可言。2. 数据结构结点内部的增删查改操作不需要通过本身的迭代器去实现。反而是迭代器如果需要支持增删改的话,应该通过调用(委派)结点或集合上的方法去实现。否则迭代器需要知道集合的内部实现细节,形成跨类的强耦合。所以你这个例子中,ListNode代码是没问题的。但迭代器因为没有基于一个抽象的接口,根本就没有达成“抽象”的作用。在现实场景中唯一意义就是作为一个“统一的遍历入口”。假如所有遍历这个集合类的客户代码都自觉使用这个迭代器的话(不太可能),以后如果对于这个集合类的遍历方案有改动的话,可以改在这里。但由于所有客户代码都直接指向这个具体的迭代器,所以改动会影响所有的客户代码,而不能实现新旧方案并存。一般来说没人会这么搞(迭代器不去实现一个抽象接口),你都实现到这个地步了,挂一个接口就能海阔天空,不挂就没啥卵用。这就相当于考试只答题不写名字。
■网友
redis中用过这种数据模型,实际开发中用的很少


    推荐阅读