迭代器如何在 C++ 中的列表上工作?
How do Iterators work on a List in C++?
这是我对迭代器如何在 C++ 中的列表上工作的困惑。如有不妥请指正
引擎盖下的列表(在 C++ 中)是双向链表。我们知道双向链表的结构——一个数据区和一个指向下一个和上一个节点的指针。所以双向链表中的每个节点在内存中都有一个地址。当我们在列表上声明一个迭代器时,它指向这个地址。那么当我们解引用一个迭代器时,我们怎么只得到数据值呢?
因为迭代器重载了运算符 *,所以它 returns 引用了 value 而不是 node。
迭代器的取消引用运算符被简单地定义为return(对)节点中包含的值。例如它可以这样定义:
template<T>
T& list<T>::iterator::operator *() {
return this->node_pointer->value;
}
这是我对迭代器如何在 C++ 中的列表上工作的困惑。如有不妥请指正
引擎盖下的列表(在 C++ 中)是双向链表。我们知道双向链表的结构——一个数据区和一个指向下一个和上一个节点的指针。所以双向链表中的每个节点在内存中都有一个地址。当我们在列表上声明一个迭代器时,它指向这个地址。那么当我们解引用一个迭代器时,我们怎么只得到数据值呢?
因为迭代器重载了运算符 *,所以它 returns 引用了 value 而不是 node。
迭代器的取消引用运算符被简单地定义为return(对)节点中包含的值。例如它可以这样定义:
template<T>
T& list<T>::iterator::operator *() {
return this->node_pointer->value;
}