是否有理由使用 std::distance() 而不是 iterator::operator-()?

Is there a reason to use std::distance() over iterator::operator-()?

我不确定为什么同时存在 std::distance(iterator const&, iterator const&)iterator::operator-(iterator const&)(以及适配器 operator-(iterator const&, iterator const&)),其中 iterator 是任何迭代器的占位符。应该用一个代替另一个,如果是,在什么情况下?

operator - 不是大多数迭代器类型的成员,因此一般使用它是错误的,除非您的算法仅支持随机访问。

另一方面,

std::distance 知道迭代器类别,如果可用,将使用 operator -,如果不可用,它将使用 N 调用 operator -- 来做减法。

嗯,并非所有迭代器都支持减去两个迭代器。对于某些人来说,它甚至没有意义,抛开违反的性能约束(它应该是 O(1),而不是 O(n))。即使是,你为什么认为迭代器是 class 类型?

std::distance() 因此回落到迭代,直到距离被覆盖作为回退,这是一个基本的迭代器操作。

虽然这种退化并不总是可以接受的,如果发生这种情况,距离最好为正,否则会带来 UB 的痛苦。

不过,尤其是在编写泛型代码(或以后可能泛化的代码)时,保持泛型是好的:
写入接口(您需要的最小接口),而不是实现。