如何有效地将大量元素附加到stxxl向量?

时间:2014-11-24 20:37:57

标签: c++ vector stxxl

我需要在stxxl向量中附加大量元素。向stxxl向量添加元素的最有效方法是什么?现在,我使用了stxxl向量的push_back,但它看起来效率不高。它远远没有使磁盘带宽饱和。还有更好的方法吗?

谢谢, 沓

3 个答案:

答案 0 :(得分:2)

关于"Efficient Sequential Reading and Writing to Vectors"的大部分内容都适用于您的案例。

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

关于以前知道向量的大小:这对EM来说并不是必需的,因为可以动态分配块。这些通常不符合规定,但无论如何都无法保证。

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

答案 1 :(得分:0)

根据the documentation

  

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

不能真正回答为什么push_back应该是I / O低效的。

答案 2 :(得分:0)

一种方法:

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

  • 调整大小后,使用emplace_back追加(或者只是在类型很简单的情况下推送,例如int)。

同时查看会员功能。可能已经存在适合您需求的实现。