c++ - 最有效的 C++ 数据结构,用于在顺序无关紧要时进行迭代?

标签 c++ list data-structures

我想保留一个对象列表,以便我可以遍历它们并通过遍历每个对象来通知每个对象一个事件。我不关心他们收到通知的顺序,我只需要对这些对象的迭代和方法调用尽快发生。

这种功能最有效的(C++ 标准库)数据结构是什么?

最佳答案

每当您发现自己在问“哪种方式更快,X 或 Y?”或“最快的 X 是什么?”这样的问题时,只有一个真正的答案:

对其进行基准测试。

如果您处于不确定的阶段并且只能选择一个,那么这里有一条经验法则,除非测量结果另有规定:

  • 它的尺寸是固定的吗?使用 std::array 或普通 C 数组。
  • 它是否总是在某个固定范围内?使用 std::array 或普通 C 数组。
  • 否则,使用std::vector

请注意,如果您在运行时找到所需的大小,则可以使用 std::vector::reserve 潜在地减少所需的内存分配数量,从而提高性能.当然,你会测量它只是为了确定 ;)


另请注意,“高效”在不同的领域可能有不同的含义。例如,使用较少的 RAM 对某些人来说可能更好,即使是以 CPU 周期为代价。

关于c++ - 最有效的 C++ 数据结构,用于在顺序无关紧要时进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48707268/

相关文章:

c - OpenGL - 将数据分配给 C 中的列表并在 glBufferData 中使用它无法正常工作

algorithm - 在没有额外空间的情况下,在 N 个排序数组中查找公共(public)元素

c++ - 与范围有关的局部变量定义,C++

c++ - 传递可变参数 std::function

list - 如何将列表中的连续数字组合到 Haskell 中的范围中?

python - numpy.concatenate 对单个参数有什么作用?

c++ - 有没有一种简单的方法可以在 C++ 中创建最小堆?

algorithm - 构建二叉搜索树和 AVL 树所需的时间复杂度之间的差异?

c++ - 调用函数时生成隐式元组

c++ - #include <avifile.h>要求#include <stdlib.h>才能使构建成功