我需要在stxxl向量中附加大量元素。向stxxl向量添加元素的最有效方法是什么?现在,我使用了stxxl向量的push_back,但它看起来效率不高。它远远没有使磁盘带宽饱和。还有更好的方法吗?
谢谢, 沓
答案 0 :(得分:2)
关于"Efficient Sequential Reading and Writing to Vectors"的大部分内容都适用于您的案例。
除了使用命令循环填充向量的vector_bufwriter之外,还有一个stxxl :: stream :: materialize()的变体,它以函数式编程风格完成。
关于以前知道向量的大小:这对EM来说并不是必需的,因为可以动态分配块。这些通常不符合规定,但无论如何都无法保证。
如果填充到达向量的末尾,我看到有人(我)自动将vector_bufwriter 加上向量的大小。目前,我认为这不是必要的,也许应该改变这种行为。
答案 1 :(得分:0)
如果只需要在
n/B
I / O中将元素顺序写入向量,则当前最快的方法是stxxl::generate。
不能真正回答为什么push_back
应该是I / O低效的。
答案 2 :(得分:0)
一种方法:
首先reserve
您需要的元素数量。使用某些类型调整矢量大小可能非常耗时。随着向量的增长,附加许多元素可能会导致多次调整大小。
调整大小后,使用emplace_back
追加(或者只是在类型很简单的情况下推送,例如int
)。
同时查看会员功能。可能已经存在适合您需求的实现。