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