2

我需要将大量元素附加到 stxxl 向量。将元素添加到 stxxl 向量的最有效方法是什么?现在,我正在使用 stxxl 向量的 push_back,但它似乎效率不高。它远未使磁盘带宽饱和。有没有更好的办法?

谢谢,大

4

3 回答 3

2

大多数关于“高效顺序读取和写入向量”的内容都适用于您的情况。

除了使用命令式循环填充向量的 vector_bufwriter 之外,还有 stxxl::stream::materialize() 的变体,它以函数式编程风格进行。

关于事先知道向量的大小:这对于 EM 来说并不是真正必要的,因为可以动态分配块。然后这些通常不会按顺序排列,但就这样吧,无论如何都不能保证。

如果填充到达向量的末端,我看到有人(我)使 vector_bufwriter 自动将向量的大小加倍。目前,我认为这没有必要,也许应该改变这种行为。

于 2014-11-26T10:10:48.410 回答
0

根据文档

如果只需要在 I/O 中将元素顺序写入向量,n/B当前最快的方法是stxxl::generate

不过,并没有真正回答为什么push_back应该是 I/O 效率低下的。

于 2014-11-24T20:56:24.250 回答
0

一种方法:

  • 首先reserve是您需要的元素数量。使用某些类型调整矢量的大小可能非常耗时。随着向量的增长,添加许多元素可能会导致多次调整大小。

  • 一旦调整大小,追加使用emplace_back(或者如果类型是微不足道的,则简单地推送,例如int)。

还要查看成员函数。很适合您的需求的实现可能已经存在。

于 2014-11-26T10:20:24.157 回答