批准std容器用于(仅)插入和迭代

Appropiate std container for (only) insertion and iteration

本文关键字:插入 迭代 std 用于 批准      更新时间:2023-10-16

如果我只想插入很多(10.000-100.000)小项目(int、float和doubles),然后迭代所有项目(顺序不重要),那么要使用哪个std容器?(注意:项目数量在开始时未知)

我注意到unsorted_set、list和forward_list具有用于插入的O(1)和用于迭代的O(n)。有没有其他东西也有这种复杂性?其中哪一个最快?(如果在内存使用方面有显著差异,我也会有兴趣了解它们。

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

我的赌注是调用std::vector::reserve()std::vector

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

问题中的所有类都具有您想要的最佳复杂度,但std::vector可能更快,尤其是,如果您知道要插入大约多少个元素,即您有可用的上限。

我想性能可能会因编译器、编译器版本和要插入的元素数量而异。很抱歉没有提供更具体的帮助。

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

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

此外,除此之外,还有容器适配器,如队列、堆栈、优先级队列等。

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