用于(仅)插入和迭代的适当std容器

时间:2013-08-14 13:13:42

标签: c++ containers std

如果我只想插入很多(10.000-100.000)的小(int,浮点数和双打)项目然后遍历所有项目(顺序不重要),那么将使用std容器? (注意:项目的数量在开始时是未知的)

我注意到unsorted_set,list和forward_list有O(1)用于插入,O(n)用于迭代。还有其他还有这种复杂性吗?哪一个是最快的? (如果在记忆使用方面存在显着差异,我也会有兴趣了解它们。

(我只对std容器感兴趣,而不是Boost或其他库容器)

4 个答案:

答案 0 :(得分:2)

我打赌std::vector打电话给std::vector::reserve()

答案 1 :(得分:0)

矢量可能是一个不错的选择。它与内存消耗中的数组相同。 O(1)插入(如果在最后插入)和O(n)迭代。它是最简单的容器,如果您的列表中没有删除或随机插入,这是一个不错的选择。

答案 2 :(得分:0)

你问题中的所有类都有你想要的最佳复杂性,但std :: vector可能更快,特别是 如果你知道要插入多少元素,即你有一个上限。

我认为性能可能会有所不同,具体取决于您的编译器,编译器版本以及要插入的元素数量。很抱歉没有提供更具体的帮助。

答案 3 :(得分:0)

根据我的说法,这取决于你想要对容器中的元素做什么。

  • 如果你想在某些位置插入元素,那么list是最快的,因为数组和向量必须在插入位置之后移动所有项目,向前一步。
  • 另一方面,如果你想访问一个位置的项目,那么数组和向量会更快。

此外,除了这些之外,还有容器适配器以及queue,stack,priority_queue等。

所以,这一切都取决于你的实现以及你想从元素容器中得到什么。