c++中迭代器是如何处理List的
How do Iterators work on a List in C++?
这是我对c++中迭代器如何在列表上工作的困惑。如果我说错了,请纠正我。
一个列表(在c++中)在底层是一个双链表。我们知道双链表的结构——一个数据区和一个指向下一个节点和上一个节点的指针。所以双链表中的每个节点在内存中都有一个地址。当在list上声明迭代器时,它指向这个地址。那么,当我们引用迭代器时,我们是如何只得到数据值的呢?
迭代器的解引用操作符被简单地定义为返回(对)节点中包含的值。例如,它可以这样定义:
template<T>
T& list<T>::iterator::operator *() {
return this->node_pointer->value;
}
因为迭代器重载了操作符*,所以它返回对值的引用,而不是对节点的引用。
相关文章:
- 警告处理为错误这里有什么问题
- 使用std::multimap迭代器创建std::list
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- C++中带有List类的迭代器Segfault
- 如何用数字处理log(0)
- 使用"std::unordereded_map"映射到"std::list"对象
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- GCC对可能有效的代码抛出init list生存期警告
- CMake:list(REMOVE_ITEM) 不处理转义的 #
- 如何编写一个C++函数,根据处理返回不同类型的std::list
- c++中迭代器是如何处理List的