【发布时间】:2018-03-04 16:33:22
【问题描述】:
我想要一些关于哪种 STL 容器最能满足以下需求的建议:
- 该集合的寿命相对较短。
- 集合包含指针。
- 仅在末尾添加元素。必须保持元素的顺序。
- 元素的数量未知,可能从数亿到数百万不等。只有在添加最后一个元素后才能知道该数字。
- 我可能会多次迭代元素。
- 添加完所有元素后,我需要根据指针所指的对象对集合进行排序。
- 排序后,我可能会多次迭代元素。
- 之后,集合将被销毁。
不需要线程安全。
以下是我的想法:
list:需要为每个元素单独分配。更昂贵的遍历。
向量:随着集合的增长需要重新分配。最佳排序和遍历性能。
双端队列:分配比列表少,重新分配比向量少。我不知道关于排序的行为。
我目前正在使用列表。 In which scenario do I use a particular STL container? 的流程图将我引导至双端队列。
我对 STL 的了解已经很老了;我不知道自 2003 年以来添加的容器类型,所以也许有一些我从未听说过的非常适合的东西。
【问题讨论】:
-
几乎总是
vector。无论如何,如果您真的关心性能,请测量它。如果你不衡量,你就真的不在乎。 -
按照流程图,我会使用矢量 - 无论如何,这几乎总是一个明智的默认选择,除非您有其他证据。 “大小变化很大”是指需要定期增加和减少大小,而不是大小可能会稳步变大。
-
啊,@Peter,谢谢,我误解了。
-
是的,@Igor,我当然打算测量它,但我想确保我从正确的选择开始。