在GHC中为O(1)预分配Data.Vector?

时间:2014-02-08 21:34:27

标签: haskell memory optimization

在C ++世界中,当std::vector将已知数量的项目添加到新向量时,push_back进行了优化 - preallocate space

Haskell未装箱的载体是否有类似物? Doc说consO(n)

1 个答案:

答案 0 :(得分:3)

根据文档,

Data.Vector.(++)是O(m + n),这比cons更有效率n次。因此,如果您只是将新元素放入新的向量中,则可以有效地将其添加到旧向量中。

请注意,在C ++中,只有在有足够的预分配区域时才可以在O(n)中执行此操作。我想,你在Haskell中获得的额外O(m)是由于Data.Vector是不可变的,并且需要副本。

如果您想使用可变向量,请查看 Data.Vector.Mutable.grow