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

Nic*_*ick 7 c++ arrays

假设我们有一个名为datasize 的数组5.如果我们将此数组作为参数传递给std::end函数

int *ptr = std::end(data);
Run Code Online (Sandbox Code Playgroud)

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

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

Nia*_*all 8

能够告诉"空"容器/序列与其中的元素.

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

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

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

为了统一,选择"结束"作为一个结束; 它解决了很多问题并为STL带来了力量.半封闭间隔已成为C++的标准.

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

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

相关.

  • @Brandon,如果您想迭代 20 元素容器的元素 3-13,而不先将它们放入单独的容器中,那么这是行不通的。 (2认同)