我应该使用哪个STL容器?C++

Pio*_*cki 4 c++ containers stl vector deque

我有一个对象的"列表",我想从中随机获取对象并将其推到此列表的前面.只会执行这种操作.因此,我不需要快速访问列表的末尾,只需要访问其他任何地方的前端和平均访问权限.

哪个容器最适合这个?我在考虑std::vector,但我读过这个insert操作效率不高.然后我想出了std::deque因为它可以快速进入前方,但是它erase在特定位置方法的效率呢?

在此先感谢您的帮助.

Kon*_*lph 7

我们可以为您提供指导,但没有明确的答案 - 您需要自己进行基准测试,因为它至关重要取决于您的集合和对象大小:

  • 对于小对象和/或相对较小的集合,std::vector将更快,因为即使您需要复制更多数据,更好的随机访问时间(O(1)vs O(n)for std::list)和缓存局部性将占主导地位.
  • 对于大型对象和/或大型集合,std::list速度会更快,因为虽然您需要O(n)来挑选随机对象,但由于复制许多大型对象非常慢,因此插入速度会快得多.

但究竟在这两种情况之间的截止位置我不能说.

此外,如果你可以逃避交换元素而不是插入,这是一个明智的选择:总是使用a std::vector.