为什么 bi-directional/forward 运算符不支持不等关系运算符?

Why does bi-directional/forward operators don't support inequality relational operators?

我目前正在学习迭代器类型,有些东西我不太明白。首先,据我了解,迭代器类型是类指针类型,这意味着它们可以指向容器中的任何元素,也可以执行算术运算(如指针)。随机访问迭代器类型似乎也支持不等式关系运算符,我认为这意味着我们可以比较两个迭代器(不管这意味着什么,如果有人能阐明这一点)。但是为什么我们不能对正向和双向迭代器类型这样做呢?我的意思是,相等运算符为他们定义得很好。我所说的不等式关系运算符是指以下运算符 <=, <, >, >=。 编辑:我没有具体的例子,但我在 cplusplus.com 上看到过这个

它不起作用,因为您使用运算符比较指针,在这种内存分配中,索引 0 的内存地址可以大于索引 1 的内存地址,依此类推。

Why does bi-directional/forward operators don't support inequality relational operators?

I mean the following operators <=, <, >, >=

因为不可能有效地1 为所有 bi-directional/forward 迭代器实现这样的运算符。

例如,考虑如何为链表的迭代器实现此类运算符。你会发现没有有效的1解决方案。

1 具有常数渐近时间和 space 复杂度。

So when comparing two iterators, we're comparing the two elements they're pointing at (i.e. their values) an not their address ?

我们正在比较它们在序列中的相对顺序。

a < b 对于迭代器意味着如果 a 元素在容器中的 b 元素之前。这很容易检查底层是连续的东西,即。支持随机访问。例如,对于仅指向下一个元素的内容,下一个元素可以放置在内存中的任何位置 - 因此回答任何两个迭代器都需要迭代(太昂贵)。