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

C++ 如何有效地将大量元素附加到stxxl向量?,c++,vector,stxxl,C++,Vector,Stxxl,我需要在stxxl向量中添加大量元素。向stxxl向量添加元素的最有效方法是什么?现在,我正在使用stxxl向量的push_back,但它似乎不是很有效。这远远没有使磁盘带宽饱和。有更好的办法吗 谢谢, Da根据: 如果只需要在n/BI/o中将元素顺序写入向量,则当前最快的方法是 没有真正回答为什么“向后推”应该是I/O效率低下的问题。所写的大部分内容都适用于您的情况 除了使用命令循环填充向量的vector_bufwriter之外,还有stxxl::stream::materialize()的一

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

谢谢, Da根据:

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


没有真正回答为什么“向后推”应该是I/O效率低下的问题。

所写的大部分内容都适用于您的情况

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

关于之前知道向量的大小:这对EM来说不是必要的,因为可以动态分配块。通常情况下,这些都不符合规定,但即便如此,也无法保证这一点

我看到有人(我)做了向量书写器,如果填充到向量的末端,它会自动将向量的大小加倍。目前,我不认为这是必要的,也许应该改变这种行为。

一种方法:

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

  • 调整大小后,使用
    emplace\u back
    (如果类型不重要,则只需按一下即可,例如
    int


同时回顾成员的职能。可能已经存在一个非常适合您需要的实现。

以前从未做过类似的事情,但您可以尝试这样做:在常规STL容器中存储相对大量的值。当达到某个限制时,调整STXXL容器的大小,以调整STL容器中的数量。使用直接迭代器访问将STL值填充到新的STXXL位置。STXXL的向量是否具有
保留
?@TimSeguine:是的:我猜这与向量大小调整有关。