我想就哪个STL容器最符合以下需求提出一些建议:
不需要线程安全。
以下是我的想法:
list:需要为每个元素单独分配。更昂贵的遍历
vector:需要在集合增长时重新分配。最好的排序和遍历表现
deque:分配比列表少,重新分配少于向量。我不知道有关排序的行为。
我目前正在使用列表。 In which scenario do I use a particular STL container?的流程图让我知道deque。
我对STL的了解很久;我不知道自2003年以来添加的容器类型,所以也许有一些我从未听说过的适合的东西。
答案 0 :(得分:3)
std::vector<T*>
将成为赢家。
不要害怕需要进行大小调整 - 仅reserve()
合理的数量(如果你的许多收藏品都在那里,那就说500)。
使用vector<T*>
对效果进行排序也非常好。
每个T
的分配和释放都很重要。注意这一点。例如,您可能希望一次分配数千个T
,以减少内存分配开销(并使其更快地在最后解除分配所有内容)。这被称为“竞技场”或“游泳池”。您可以将32位相对指针存储到竞技场中,从而节省了一半的指针存储空间。
当然,如果T
很小,您可以考虑按值而不是按指针存储它。