考虑一个输入迭代器,例如join_iterator:它迭代其他范围的串联。重复调用++i可能比简单的i += n.
尽管如此,大多数需要将迭代器推进任意数量的 C++ 代码都使用,当迭代器不是随机访问时std::advance,它会自动诉诸调用。++i
(可悲的是,大多数人使用std::advance(i, n)而不是using std::advance; advance(i, n),所以我不能只提供advance我的迭代器并依赖 ADL。)
另一方面,我不能使用+或者+=因为输入迭代器不必实现它们。
所以问题是:在以下情况下,我将如何支持这种情况:
实现这样的迭代器?
使用可能具有优化的输入迭代器
operator +=?
(请注意,这advance并不是+唯一重要的场景——distance并且-有同样的问题。)