繁体   English   中英

C ++:vector和list之间的混合:类似于std :: rope?

[英]C++: mixture between vector and list: something like std::rope?

当存储一堆项目并且我不需要随机访问容器时,我使用的是std::list ,这很好。 但是,有时候(特别是当我只是将条目推回到后面并且从不删除中间的某个地方时),我希望我有一些具有更好性能的结构来添加条目。

std::vector很糟糕,因为:

  • 如果它不再适合,它必须重新分配。
  • 它并不适用于大量数据(因为你不能总是获得非常大的连续空闲内存)。

std::list很糟糕,因为:

  • 它在每个push_back上进行分配。 这很慢并导致大量内存碎片。

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

基本上,我想要像std::list< boost::array<T, 100> >那样的东西。 或者也许代替100 ,让它为4096/sizeof(T) 也许std::list< std::vector<T> >并且第一个向量可以很小,然后可以进一步增长。 实际上我想从使用中隐藏它,所以我可以做一个mycontainer.push_back(x)

std::rope有点类似,但标准中没有。

在Boost中有这样的东西吗?

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

是的,它叫做std :: vector。 这是O(1)时间push_back,几乎总是比std :: list快。 (是的,它也有记忆效率)

std :: list最重要的特性是从中间删除/插入常量时间。 如果你不需要它,请选择std :: vector。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM