我需要将大量元素附加到 stxxl 向量。将元素添加到 stxxl 向量的最有效方法是什么?现在,我正在使用 stxxl 向量的 push_back,但它似乎效率不高。它远未使磁盘带宽饱和。有没有更好的办法?
谢谢,大
大多数关于“高效顺序读取和写入向量”的内容都适用于您的情况。
除了使用命令式循环填充向量的 vector_bufwriter 之外,还有 stxxl::stream::materialize() 的变体,它以函数式编程风格进行。
关于事先知道向量的大小:这对于 EM 来说并不是真正必要的,因为可以动态分配块。然后这些通常不会按顺序排列,但就这样吧,无论如何都不能保证。
如果填充到达向量的末端,我看到有人(我)使 vector_bufwriter 自动将向量的大小加倍。目前,我认为这没有必要,也许应该改变这种行为。
一种方法:
首先reserve
是您需要的元素数量。使用某些类型调整矢量的大小可能非常耗时。随着向量的增长,添加许多元素可能会导致多次调整大小。
一旦调整大小,追加使用emplace_back
(或者如果类型是微不足道的,则简单地推送,例如int
)。
还要查看成员函数。很适合您的需求的实现可能已经存在。