pap*_*jam 5 c++ boost iterator boost-range
Boost的any_range文档说明如下:
尽管底层
any_iterator是最快的可用实现,但any_range由于实现递增,递减,提前,等等所需的虚函数调用的成本,性能开销仍然可观.等等.通常,更好的设计选择是转换为规范形式.
作者的"规范形式"是什么意思?有人能举个例子吗?
编辑: 正如这里建议的那样,我在提升用户的邮件列表上提出了同样的问题.以下是本文原作者Neil Groves不得不说:
例如,将范围复制到矢量中.
是的,这正是我在编写文档时考虑的替代设计.迭代any_range的开销非常大,并且通常与将具体结果类型复制到诸如向量之类的容器中相比较差.但是,情况并非总是如此,并且Boost.Range的一些用户希望能够实现对any_range实例进行操作的算法.这有时是期望的,例如,允许从支持各种容器的共享库中暴露算法.any_range的使用也可能有意义,其中范围内的遍历数量很小,但底层容器的内存大小非常大.
在许多情况下,性能开销无关紧要.我想确保我没有误导任何人广泛采用any_range用法.我相信这个类的有效用法很少,但有时候它正是正确的设计选择.我将在适当的时候通过一些额外的澄清和示例来改进文档.
我认为它们的意思是将您的范围转换为std::vector或项目中的任何标准容器,然后将迭代器返回到其中。
权衡是在将范围从原始范围类型复制到规范容器类型的成本与用于实现 any_range 的类型擦除相关的堆分配和虚拟函数调用的成本之间进行权衡。根据范围内的元素数量、每个元素的大小以及在该范围内进行的遍历次数,一种选择可能比另一种更好。