c++ - 迭代器是否分配内存(例如指针)?
问题描述
迭代器是否分配内存(例如指针)?
例如:
vector<int>v(100);
vector<int>::iterator it = v.begin();
“它”是否分配内存并将向量“v”的第一个元素的地址存储在其中?如果是这样,为什么我们不能打印“它”的地址,例如指针?
解决方案
迭代器由它们执行的功能定义。他们如何执行该功能是一个private
实现细节。如果一个迭代器想要存储一个地址,它可以存储一个地址。如果它认为存储生命、宇宙和一切终极问题的答案是有用的,它可以在某个地方存储 42。如果它想分配 2MB 的内存,它可以——但最终用户可能会注意到并抱怨。关键是实现细节不是标准化的,你可以从迭代器中得到的只是一个合理有效的功能实现。
您不能打印实现细节,因为这不是所需功能的一部分。(这是一件好事。对迭代器的要求越少,实现的自由度就越大,以使迭代器高效。)
如果您认为实现细节对您的应用程序至关重要,您可能想要编写自己的容器和迭代器类,这样您就不会受库实现者的摆布。
如果您只是在寻找调试帮助,那么您问错了问题。获取迭代器指向的对象的地址是相当简单的,假设它确实指向一个对象。取消引用以获取对象,然后获取地址。(迭代器it
指向地址为 的对象&(*it)
。)无需纠结于实现细节。
推荐阅读
- apache - 使用 Apache 在 Windows 上通过 CGI 运行 Web 应用程序
- reactjs - 数学图像名称。[hash] 通过与从数据库中获取的纯图像名称反应构建
- php - 找不到类“App\TestService” - Laravel
- azure - 授予对 Azure 存储帐户的用户分配标识的读取访问权限
- javascript - 查看 WebGL 内存
- header - 使用空手道修改标题
- c# - 通过 C# .NET 应用程序调用时无法识别命令,但直接调用时有效
- r - 使用 ShinyFiles::ShinyFileChoose() 访问网络驱动器上的文件时出现问题 - parseFilePaths() 函数返回 NA
- upgrade - Apache Ignite 从 1.8 升级到最新版本
- angular - 如何取消 Ag-grid OnFilterChanged 事件?