C++ 如何有效地将大量元素附加到stxxl向量?
我需要在stxxl向量中添加大量元素。向stxxl向量添加元素的最有效方法是什么?现在,我正在使用stxxl向量的push_back,但它似乎不是很有效。这远远没有使磁盘带宽饱和。有更好的办法吗 谢谢, Da根据: 如果只需要在C++ 如何有效地将大量元素附加到stxxl向量?,c++,vector,stxxl,C++,Vector,Stxxl,我需要在stxxl向量中添加大量元素。向stxxl向量添加元素的最有效方法是什么?现在,我正在使用stxxl向量的push_back,但它似乎不是很有效。这远远没有使磁盘带宽饱和。有更好的办法吗 谢谢, Da根据: 如果只需要在n/BI/o中将元素顺序写入向量,则当前最快的方法是 没有真正回答为什么“向后推”应该是I/O效率低下的问题。所写的大部分内容都适用于您的情况 除了使用命令循环填充向量的vector_bufwriter之外,还有stxxl::stream::materialize()的一
n/B
I/o中将元素顺序写入向量,则当前最快的方法是
没有真正回答为什么“向后推”应该是I/O效率低下的问题。所写的大部分内容都适用于您的情况 除了使用命令循环填充向量的vector_bufwriter之外,还有stxxl::stream::materialize()的一个变体,它以函数式编程的方式完成 关于之前知道向量的大小:这对EM来说不是必要的,因为可以动态分配块。通常情况下,这些都不符合规定,但即便如此,也无法保证这一点 我看到有人(我)做了向量书写器,如果填充到向量的末端,它会自动将向量的大小加倍。目前,我不认为这是必要的,也许应该改变这种行为。一种方法:
- 首先
保留所需的元素数量。使用某些类型调整向量的大小可能非常耗时。随着向量的增长,添加许多元素可能会导致多次调整大小
- 调整大小后,使用
(如果类型不重要,则只需按一下即可,例如emplace\u back
)int
同时回顾成员的职能。可能已经存在一个非常适合您需要的实现。以前从未做过类似的事情,但您可以尝试这样做:在常规STL容器中存储相对大量的值。当达到某个限制时,调整STXXL容器的大小,以调整STL容器中的数量。使用直接迭代器访问将STL值填充到新的STXXL位置。STXXL的向量是否具有
保留
?@TimSeguine:是的:我猜这与向量大小调整有关。