为什么指向一个数组或向量中最后一个元素的内存位置?

时间:2017-02-05 18:23:25

标签: c++ arrays

假设我们有一个名为data且数量为5的数组。如果我们将此数组作为参数传递给std::end函数,如

int *ptr = std::end(data);

它将返回一个指针,指向数组中一个超过最后一个元素的内存位置。

问题

指针指向一个超过数组中最后一个元素的内存位置有什么意义?为什么不直接指向数组中的最后一个元素?

1 个答案:

答案 0 :(得分:8)

能告诉"空"容器/序列来自其中包含元素的容器。

如果容器为空,则指向其第一个元素的指针将是一个超过结尾的指针,与" end"相同。位置。

也可以使用NULL指针,但由于迭代器必然是指针,NULL不适用。也可以使用迭代器的默认值。在通用编程中,"默认"在所有类型中统一确定(请记住这里的C ++ 98之前的实现)?

并非所有序列/容器在内存中都是连续的,任何使用operator <等比较的尝试都不合适。需要使用相等(或不等式),运算符==!=,因此需要单个点(或元素)来指示最后一个元素; &#34;一个结束&#34;解决了这个问题。

为了统一,&#34;结束&#34;被选为过去的一个;它解决了很多问题并为STL带来了力量。半封闭间隔已成为C ++的常态。

另一方面,范围库和技术在这个问题上有了另一个亮点,但是当STL的基础被布局时,这并不存在。

另一方面的说明;并非所有序列都与容器相关,一些需要迭代的序列只是原始容器或序列的一部分,半闭区间提供了一种统一的技术来访问序列,与原始容器中的位置无关/序列。

Related