端迭代器在非连续的C++容器中指向何处?
在类似std::vector的情况下::end迭代器将指向最后一个元素之后的元素。不能取消引用此迭代器,但可以将其与另一个迭代器进行比较。如果您将另一个迭代器与end进行比较,您就知道您已经到达了容器的末尾。在容器不是数组的情况下,例如树或链表,这些结束迭代器的值与其他的迭代器相比,用< p>,C++标准以公理化的方式定义结束迭代器值: 22.2.1一般容器要求[容器.要求.一般] begin返回一个迭代器,该迭代器引用 容器end返回一个迭代器,该迭代器超过了结束值 对于容器。如果容器为空,则开始==结束 “超越终点”是您唯一可以使用的公理化定义。这就是你能得到的。每个C++实现都可以以任何方式实现结束迭代器值,以及其他相关要求。举个例子:一种可能是在满足所有其他要求的情况下,对结束迭代器值使用null指针,即减量操作生成一个迭代器,指向非空容器中的最后一个元素,将迭代器递增到最后一个元素生成此实现null指针端迭代器在非连续的C++容器中指向何处?,c++,iterator,C++,Iterator,在类似std::vector的情况下::end迭代器将指向最后一个元素之后的元素。不能取消引用此迭代器,但可以将其与另一个迭代器进行比较。如果您将另一个迭代器与end进行比较,您就知道您已经到达了容器的末尾。在容器不是数组的情况下,例如树或链表,这些结束迭代器的值与其他的迭代器相比,用< p>,C++标准以公理化的方式定义结束迭代器值: 22.2.1一般容器要求[容器.要求.一般] begin返回一个迭代器,该迭代器引用 容器end返回一个迭代器,该迭代器超过了结束值 对于容器。如果容器为空,
当然,这不是唯一可能的实现,但是无论C++编译器的实际实现与一般格式的C++代码一般无关。格式良好的C++代码不需要将特定迭代器与空指针进行比较,明确地检查结束迭代器值,它将与任何结束返回进行比较。 < P> C++标准以公理化方式定义结束迭代器值: 22.2.1一般容器要求[容器.要求.一般] begin返回一个迭代器,该迭代器引用 容器end返回一个迭代器,该迭代器超过了结束值 对于容器。如果容器为空,则开始==结束 “超越终点”是您唯一可以使用的公理化定义。这就是你能得到的。每个C++实现都可以以任何方式实现结束迭代器值,以及其他相关要求。举个例子:一种可能是在满足所有其他要求的情况下,对结束迭代器值使用null指针,即减量操作生成一个迭代器,指向非空容器中的最后一个元素,将迭代器递增到最后一个元素生成此实现null指针
当然,这不是唯一可能的实现,但是无论C++编译器的实际实现与一般格式的C++代码一般无关。格式良好的C++代码不需要将特定迭代器与空指针进行比较,明确地检查结束迭代器值,它将与任何结束返回进行比较。请指定一个特定的编译器。实现这一点的自然方法是使用一个表示空值的哨兵。@πάνταῥεῖ — 它不是实现定义的。它是特定于实现的。定义的实现意味着需要实现来记录其行为。@PeteBecker很抱歉。但它是特定于编译器的。@πάνταῥεῖ 仅当编译器设置标准库时。这可能是可以覆盖的。libc++/libstdc++有人吗?这是实现定义的,请指定一个特定的编译器。实现这一点的自然方法是使用一个表示空值的哨兵。@πάνταῥεῖ — 它不是实现定义的。它是特定于实现的。定义的实现意味着需要实现来记录其行为。@PeteBecker很抱歉。但它是特定于编译器的。@πάνταῥεῖ 仅当编译器设置标准库时。这可能是可以覆盖的。libc++/libstdc++有人吗?