这是一个关于迭代器如何在C ++中的列表上工作的混淆。如果我错了,请纠正我。
引擎盖下的列表(在C ++中)是双链表。我们知道双向链表的结构 - 数据区和指向下一个和前一个节点的指针。因此,双向链表中的每个节点都在内存中有一个地址。当我们在列表上声明一个迭代器时,它指向这个地址。因此,当我们解析迭代器时,我们如何只得到数据值?
答案 0 :(得分:10)
迭代器的解除引用运算符被简单地定义为返回(引用)节点中包含的值。例如,它可以这样定义:
template<T>
T& list<T>::iterator::operator *() {
return this->node_pointer->value;
}
答案 1 :(得分:6)
因为迭代器重载了operator *,所以它返回对值而不是节点的引用。