滑过矢量的好处?

gc *_*c . 4 c++ stl list vector

我需要的只是一个动态增长的数组.我不需要随机访问,我总是插入到最后并从头到尾阅读它.

slist似乎是第一选择,因为它提供了我所需要的足够的东西.但是,我不知道通过使用slist而不是vector来获得什么好处.此外,我读到的关于STL的一些材料说,"向量通常是访问元素和从序列末尾添加或删除元素的最有效时间".因此,我的问题是:对于我的需求,slist真的比矢量更好吗?提前致谢.

Kon*_*lph 13

对于初学者来说,slist是非标准的.

根据您的选择,链接列表将比矢量慢,依赖它.造成这种情况的原因有两个:

  1. 首先是缓存局部性; 向量将它们的元素线性地存储在RAM中,这有利于缓存和预取.
  2. 其次,附加到链接列表涉及动态分配,这会增加很大的开销.相比之下,载体大部分的时间都没有需要分配内存.

然而,一个std::deque可能会更快.在深入的性能分析表明,尽管偏见相反,std::deque几乎总是优于std::vector性能(如果不需要随机存取),由于它的改善(分块)内存分配策略.

  • 确实.如果我们不处理很少的数据项,我也会推荐deque.deque是std :: stack的默认底层序列并非巧合.但是,对于少数项目,矢量应该是默认值.(std :: stack不知道将推送多少项,因此它以deque的安全方式运行). (2认同)