STL iterators: container.end()

STL iterators: container.end()

本文关键字:end container iterators STL      更新时间:2023-10-16

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

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

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

结束迭代器(至少是象征性的)只指向容器的结束。容器中的有效项目从*container.begin()*container.end()-1

换句话说,您可以将其他迭代器与末端迭代器进行比较,以查看它们是否相等(这告诉您已经到达容器中项的末端),但您可以而不是取消引用该末端迭代机(即,您不得试图访问它引用的项)。

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

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

相关文章: