【发布时间】:2018-03-26 16:34:14
【问题描述】:
最近在课堂上,我们学习了 STL 迭代器来遍历列表。在为链表的基本迭代器给出的示例代码中,我遇到了一些我无法理解的东西。
我们有 2 个迭代器类,const_iterator 和迭代器。它们都是 List 类的子类。迭代器继承自 const_iterator。在迭代器的构造函数中我不知道为什么会这样写;
迭代器类:
class iterator:public const_iterator{
friend sortedList
protected:
iterator(Node* n):const_iterator(n){}
public:
iterator(){
n = nullptr;
}
const_iterator 类:
class const_iterator {
friend SortedList
protected:
Node* curr_;
const_iterator(Node* n){
curr_ = n;
}
public:
const_iterator(){
curr_ = nullptr;
}
我的问题是为什么迭代器从 const_iterator 继承,为什么迭代器的构造函数初始化 const_iterator ctor 而对自己什么也不做。
附加问题;从迭代器访问 curr_ 时,我将如何引用它?我会直接调用 curr_ 还是使用 this->curr_?
【问题讨论】:
-
那不是标准库代码。要理解它,我们需要更多地了解您所询问的任何实现。
-
不管怎样,
iterator中的 default-ctor 看起来坏了。 -
您可以查看stackoverflow.com/questions/2844466/…,这可能有助于您理解从 const_iterator 继承的基本原理。我个人不喜欢这种方式,因为应该使用 IMO 公共继承来传达“公共”信息(即为将被多态使用的对象建模 a is-a 关系),而这里的情况并非如此。跨度>
标签: c++ linked-list iterator