【发布时间】:2012-11-23 04:16:10
【问题描述】:
我有一个对象“列表”,我想从中随机取出对象并将其推到此列表的前面。只会执行这种操作。所以我不需要快速访问列表末尾,只需要它的前面和对任何其他地方的平均访问。
哪个容器最适合这个?我在考虑std::vector,但我读到insert 操作效率不高。然后我想出了std::deque,因为它可以快速访问前面,但是erase在特定位置方法的效率如何?
提前感谢您的帮助。
【问题讨论】:
-
您的容器中将存储多少数据? 1MB以下,选择简单的
vector。不会有很大的性能差异。 -
如果对象很大,那么优化的第一个尝试可能是使用指向它们的(智能)指针的向量/双端队列。您的
erase仍然是O(n),但要移动的数据量更小。 -
如果您要使用
vector,请将其推到后面并使用反向迭代器。把它推到前面是愚蠢的。 -
你需要
push它在列表的顶部,还是swap这个元素在顶部?后者效率更高 -
@Mosquito,那就用矢量(更好的指针)
标签: c++ stl vector containers deque