首页 > 解决方案 > 迭代器是否分配内存(例如指针)?

问题描述

迭代器是否分配内存(例如指针)?

例如:

vector<int>v(100);
vector<int>::iterator it = v.begin();

“它”是否分配内存并将向量“v”的第一个元素的地址存储在其中?如果是这样,为什么我们不能打印“它”的地址,例如指针?

标签: c++pointersmemoryiterator

解决方案


迭代器由它们执行的功能定义。他们如何执行该功能是一个private实现细节。如果一个迭代器想要存储一个地址,它可以存储一个地址。如果它认为存储生命、宇宙和一切终极问题的答案是有用的,它可以在某个地方存储 42。如果它想分配 2MB 的内存,它可以——但最终用户可能会注意到并抱怨。关键是实现细节不是标准化的,你可以从迭代器中得到的只是一个合理有效的功能实现。

您不能打印实现细节,因为这不是所需功能的一部分。(这是一件好事。对迭代器的要求越少,实现的自由度就越大,以使迭代器高效。)

如果您认为实现细节对您的应用程序至关重要,您可能想要编写自己的容器和迭代器类,这样您就不会受库实现者的摆布。

如果您只是在寻找调试帮助,那么您问错了问题。获取迭代器指向的对象的地址是相当简单的,假设它确实指向一个对象。取消引用以获取对象,然后获取地址。(迭代器it指向地址为 的对象&(*it)。)无需纠结于实现细节。


推荐阅读