首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:向量和列表的混合:类似于std::rope的东西?

C++:向量和列表的混合:类似于std::rope的东西?
EN

Stack Overflow用户
提问于 2010-09-22 16:49:37
回答 2查看 894关注 0票数 6

当我存储一堆物品并且我不需要随机访问容器时,我使用的是一个std::list,它基本上是很好的。然而,有时(尤指)当我只是向后推回条目,而不是删除中间的某个地方),我希望我有一些结构,更好的添加条目的性能。

std::vector是坏的,因为:

  • 如果它不再合适就必须重新分配。
  • 实际上不能处理大量的数据(因为你不能总是得到大量的连续空闲内存)。

std::list是坏的,因为:

  • ,它在每个push_back上进行分配。这是缓慢的,导致大量的内存fragmentation.

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

基本上,我想要一些类似std::list< boost::array<T, 100> >之类的东西。或者让它成为100,而不是4096/sizeof(T)。也许std::list< std::vector<T> >和第一个向量也可以是小的,然后进一步的向量可以生长。实际上,我想让它不被使用,所以我只需要做一个mycontainer.push_back(x)

std::rope有点类似,但在标准中是不可用的。

有类似的东西在助推吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-22 16:55:50

你考虑过使用std::deque吗?它的元素不是连续存储的,但它确实允许对元素的随机访问;如果您只是在序列的开头或结尾插入元素,那么它可能提供比std::vector更好的性能。

票数 10
EN

Stack Overflow用户

发布于 2010-09-22 16:56:28

是的,它叫做std::载体。O(1) time push_back几乎总是比std::list快。(是的,而且它也是内存高效的)

std::list最重要的特点是从中间删除/插入固定时间。如果您不需要它,请选择std::vector。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3771643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档