假设我们有一个名为datasize 的数组5.如果我们将此数组作为参数传递给std::end函数
int *ptr = std::end(data);
Run Code Online (Sandbox Code Playgroud)
它将返回指向数组中最后一个元素的内存位置的指针.
题
指针指向一个超过数组中最后一个元素的内存位置有什么意义?为什么不指向数组中的最后一个元素?
能够告诉"空"容器/序列与其中的元素.
如果容器为空,则指向其第一个元素的指针将是一个超过结尾的指针,与"结束"位置相同.
一个NULL指针也可能被使用,但由于迭代器是必然三分球,NULL将不适用.也可以使用迭代器的默认值.在泛型编程中,如何在所有类型中统一确定"默认"(请记住这里的C++ 98之前的实现)?
并非所有序列/容器在内存中都是连续的,任何使用比较的尝试operator <都是不合适的.使用等式(或不等式),运算符==并且!=是必需的,因此需要单个点(或元素)来指示最后一个元素; "一个接一个结束"解决了这个问题.
为了统一,选择"结束"作为一个结束; 它解决了很多问题并为STL带来了力量.半封闭间隔已成为C++的标准.
另一方面,范围库和技术在这个问题上有了另一个亮点,但是当STL的基础布局时,这并不存在.
另一边注意; 并非所有序列都与容器相关,一些需要迭代的序列只是原始容器或序列的一部分,半闭区间提供了一种统一的技术来访问序列,与原始容器中的位置无关/序列.
相关.
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |