【问题标题】:How do Iterators work on a List in C++?迭代器如何在 C++ 中的列表上工作?
【发布时间】:2015-08-16 23:42:51
【问题描述】:

这是我对迭代器如何在 C++ 中的列表上工作的困惑。如果我错了,请纠正我。

一个列表(在 C++ 中)在底层是一个双链表。我们知道双向链表的结构——一个数据区和一个指向下一个和前一个节点的指针。所以双向链表中的每个节点在内存中都有一个地址。当我们在一个列表上声明一个迭代器时,它指向这个地址。那么当我们取消对迭代器的引用时,我们如何只获得数据值呢?

【问题讨论】:

  • "当我们取消引用一个迭代器时,我们怎么只得到数据值" 因为这是定义迭代器的取消引用运算符的方式
  • nag, nag, nag... 列表通常实现为双向链表,但并非必须如此。

标签: c++ list listiterator


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    因为迭代器重载了运算符 *,所以它返回对 value 的引用,而不是 node

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2015-05-20
      • 2017-08-15
      • 2018-05-20
      相关资源
      最近更新 更多