混合向量和列表之间

混合向量和列表之间

本文介绍了C ++:混合向量和列表之间:是这样的std ::绳子?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当存储了一堆物品,我不需要容器随机访问,我使用的是的std ::列表其中大部分是罚款。但是,有时(尤其是当我刚推回条目后面,从来没有在中间的某个位置删除),我希望我有一些结构具有更好的性能用于添加的条目。

When storing a bunch of items and I don't need random access to the container, I am using an std::list which is mostly fine. However, sometimes (esp. when I just push back entries to the back and never delete somewhere in the middle), I wish I had some structure with better performance for adding entries.

的std ::矢量是不好的,因为:


  • 必须要是不合身了它重新分配。

  • 它并没有真正的海量数据的工作(因为你不能总是得到持续释放内存非常大的块)。

的std ::列表是不好的,因为:


  • 这使得在每一个的push_back分配。这是缓慢的,并导致大量的内存碎片。

所以,介于两者之间的是我想要的。

So, something in between is what I want.

基本上,我想是这样的std ::列表<提高::数组< T,100〕 > 左右。或者,也许不是 100 ,让它成为 4096 /的sizeof(T)。也许还的std ::列表<的std ::矢量< T> > 和第一载体可以是小,然后进一步那些可以生长。其实我想有从使用隐藏的,所以我可以做一个 mycontainer.push_back(X)

Basically, I want something like std::list< boost::array<T, 100> > or so. Or maybe instead of 100, let it be 4096/sizeof(T). Maybe also std::list< std::vector<T> > and the first vectors can be small and then further ones can grow. Actually I want to have that hidden from the usage, so I can just do a mycontainer.push_back(x).

有点类似,但它不提供标准的。

std::rope is a bit similar to that but it is not available in the standard.

有没有这样的事情在升压左右?

Is there something like this in Boost or so?

推荐答案

你有没有考虑使用的std :: deque的?它的元素没有连续存储,但它确实允许元素的随机访问;如果你只插入的开头或序列的结束元素,它可能会比搜索的std ::矢量更好的性能

Have you considered using std::deque? Its elements are not stored contiguously but it does allow random access to elements; if you are only inserting elements at the beginning or end of the sequence, it may give better performance than a std::vector.

这篇关于C ++:混合向量和列表之间:是这样的std ::绳子?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 13:09