最有效的C++数据结构,在订单无关紧要时进行迭代?

Eth*_*gue 0 c++ list data-structures

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

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

OMG*_*chy 7

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

基准吧.

如果您处于不确定且只需选择一个的阶段,除非测量结果另有说明,否则这是一条经验法则:

  • 它是固定大小的吗?使用std::array或普通的C数组.
  • 它总是会在一些固定范围内吗?使用std::array或普通的C数组.
  • 否则,请使用std::vector.

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


另请注意,"高效"可能意味着不同的东西,具体取决于您的域名.例如,使用较少的RAM可能对某些人来说更好,即使以CPU周期为代价也是如此.