Boost 的any_range文档说明如下:
尽管底层
any_iterator
是最快的可用实现,但any_range
由于实现增量、减量、提前、相等等所需的虚函数调用成本,性能开销仍然是可观的。通常更好的设计选择是转换为规范形式。
作者所说的“规范形式”是什么意思?有人可以举个例子吗?
编辑: 正如这里所建议的,我在 boost 用户的邮件列表中提出了同样的问题。以下是本文原作者 Neil Groves 所说的:
例如,将范围复制到向量中。
是的,这正是我在编写文档时想到的替代设计。在 any_range 上进行迭代的开销相当大,并且通常与将具体结果类型复制到容器(例如向量)中相比较差。然而,情况并非总是如此,Boost.Range 的一些用户希望能够实现对 any_range 实例进行操作的算法。这有时是可取的,例如,允许从支持各种容器的共享库中公开算法。使用 any_range 也可能适用于范围内的通过次数很少,但底层容器的内存大小非常大的情况。
在许多情况下,性能开销无关紧要。我想确保我没有误导任何人广泛采用 any_range 用法。我相信这个类的有效用法很少,但有时它正是正确的设计选择。我将在适当的时候通过一些额外的说明和示例来改进文档。