迭代器如何在C ++中使用List?

时间:2015-08-16 23:42:51

标签: c++ list listiterator

这是一个关于迭代器如何在C ++中的列表上工作的混淆。如果我错了,请纠正我。

引擎盖下的列表(在C ++中)是双链表。我们知道双向链表的结构 - 数据区和指向下一个和前一个节点的指针。因此,双向链表中的每个节点都在内存中有一个地址。当我们在列表上声明一个迭代器时,它指向这个地址。因此,当我们解析迭代器时,我们如何只得到数据值?

2 个答案:

答案 0 :(得分:10)

迭代器的解除引用运算符被简单地定义为返回(引用)节点中包含的值。例如,它可以这样定义:

template<T>
T& list<T>::iterator::operator *() {
  return this->node_pointer->value;
}

答案 1 :(得分:6)

因为迭代器重载了operator *,所以它返回对而不是节点的引用。