当您无法测量差异时,如何处理iterator :: difference_type?

Pha*_*rap 4 c++ iterator difference

我正在为第3个C方库编写C ++包装器。

该库提供了一些用于迭代一系列对象的功能。

我想编写一个迭代器来包装此行为,从而使迭代更容易,但是我无法考虑如何提供强制性的“差异”类型,因为迭代的对象没有有意义的相对顺序并且我正在使用的API不能提供预先查找可用对象数量的方法。

我无法计算对象的迭代次数,因为尽管这可以解决单个迭代器,但会使end()迭代器与其他迭代器之间的差异不确定。

tem*_*def 5

C ++中的所有迭代器都需要提供某种形式的difference_type。该类型是否有意义有用是一个完全独立的问题。

根据您的描述,似乎您正在使用输入迭代器,它使您能够对数据流进行单次传递,但不能备份或保存流中的位置。对于输入迭代器,仍然需要有一个difference_type定义,但是没有有意义的方法来利用两个迭代器的区别。测量距离的唯一方法是手动计算您所走过的元素数量。

std::ptrdiff_t这里使用默认值可能是非常合理的,除非您有一个数据流可以生成太多元素,以至于无法将它们的数量放入std::ptrdiff_t。然后,即使您的迭代器实际上并没有让人们计算条目之间的距离,客户也可以使用它来计算他们已经看到了多少东西。