问题描述
当存储了一堆物品,我不需要容器随机访问,我使用的是的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 ::绳子?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!