gpt4 book ai didi

c++ - Boost any_range 与 "canonical form"- 后者是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:47 25 4
gpt4 key购买 nike

Boost 的 any_range文档说明如下:

Despite the underlying any_iterator being the fastest available implementation, the performance overhead of any_range is still appreciable due to the cost of virtual function calls required to implement increment, decrement, advance, equal etc. Frequently a better design choice is to convert to a canonical form.

作者所说的“规范形式”是什么意思?谁能举个例子?

编辑:正如这里所建议的,我在 boost 用户的邮件列表中问了同样的问题。以下是本文原作者尼尔·格罗夫斯 (Neil Groves) 的原话:

For example, copying the range into a vector.

是的,这正是我在编写文档时想到的替代设计。遍历 any_range 的开销相当可观,并且通常与将具体结果类型复制到容器(如 vector )相比效果不佳。然而,情况并非总是如此,Boost.Range 的一些用户希望能够实现对 any_range 实例进行操作的算法。例如,有时希望允许从支持各种容器的共享库中公开算法。使用 any_range 也可能在范围内的传递次数很少但底层容器的内存大小非常大的情况下有意义。

在许多情况下,性能开销无关紧要。我想确保我不会误导任何人广泛采用 any_range 用法。我相信此类的有效用法很少,但有时它正是是正确的设计选择。我将在适当的时候通过一些额外的说明和示例来改进文档。

最佳答案

我认为它们的意思是将您的范围转换为 std::vector,或者您项目中的任何标准容器,然后将迭代器返回到其中。

权衡是将范围从原始范围类型复制到规范容器类型的成本,以及与用于实现 any_range 的类型删除相关的堆分配和虚函数调用的成本。根据范围内有多少元素、每个元素有多大以及在该范围内进行多少遍,一个选项可能比另一个更好。

关于c++ - Boost any_range 与 "canonical form"- 后者是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com