哪种STL容器最能满足这些需求?

时间:2017-09-23 03:50:43

标签: c++ stl

我想就哪个STL容器最符合以下需求提出一些建议:

  1. 这个系列的寿命相对较短。
  2. 该集合包含指针。
  3. 元素仅在最后添加。必须保持元素的顺序。
  4. 元素数量未知,可能从数百到数百万不等。只有在添加最终元素后才能知道该数字。
  5. 我可能会多次迭代这些元素。
  6. 添加所有元素后,我需要根据指针引用的对象对集合进行排序。
  7. 排序后,我可能会多次迭代这些元素。
  8. 之后,该集合将被销毁。
  9. 不需要线程安全。

    以下是我的想法:
    list:需要为每个元素单独分配。更昂贵的遍历 vector:需要在集合增长时重新分配。最好的排序和遍历表现 deque:分配比列表少,重新分配少于向量。我不知道有关排序的行为。

    我目前正在使用列表。 In which scenario do I use a particular STL container?的流程图让我知道deque。

    我对STL的了解很久;我不知道自2003年以来添加的容器类型,所以也许有一些我从未听说过的适合的东西。

1 个答案:

答案 0 :(得分:3)

根据讨论的要点,

std::vector<T*>将成为赢家。

不要害怕需要进行大小调整 - 仅reserve()合理的数量(如果你的许多收藏品都在那里,那就说500)。

使用vector<T*>对效果进行排序也非常好。

每个T的分配和释放都很重要。注意这一点。例如,您可能希望一次分配数千个T,以减少内存分配开销(并使其更快地在最后解除分配所有内容)。这被称为“竞技场”或“游泳池”。您可以将32位相对指针存储到竞技场中,从而节省了一半的指针存储空间。

当然,如果T很小,您可以考虑按值而不是按指针存储它。