繁体   English   中英

STL迭代器:container.end()

[英]STL iterators: container.end()

我正在阅读一些关于STL的文档,并且在那里写了end()函数返回容器的最后一个元素旁边的字节的迭代器。

我想知道,如果容器占用整个可用内存的最后一个字节,该怎么办? 那会发生什么?

C ++内存模型保证您始终可以在数组的最后一个元素之后形成指向元素的指针。 如果没有,系统将不允许您在此位置分配对象,否则它将环绕。 另请注意,这是数组的潜在问题,因为其他容器可以使用迭代器类型,它以其他合适的形式处理过去的结束位置:它们完全控制增量操作的工作方式。

结束迭代器(至少比喻)指出刚刚过去的容器的端部。 容器中的有效项从*container.begin()*container.end()-1

换句话说,您可以将其他迭代器与结束迭代器进行比较,以查看它们是否相等(它告诉您已到达容器中项目的末尾),但是您无法取消引用该结束迭代器(即,你不能试图访问它所引用的项目)。

编辑:对不起,有点误解了这个问题:好吧,如果容器实际使用了内存的最后一个字节(很少/不太可能,但理论上可行),你通常会看到地址环绕到内存的开头,假设它是一个当然,迭代器确实在地址方面起作用。 在这种情况下,您通常会看到它变成0地址,仍然可以与任何有效地址区分开(即0将转换为空指针,它不能是有效指针)。

然而,在一个典型的情况下,很可能不允许发生这样的事情。 例如,在大多数32位系统上,用户被限制使用前2或3千兆字节的地址空间,并且高位地址是为操作系统保留的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM