我可以理解何时使用列表,但是不知道何时使用向量比在视频游戏中使用列表更好:何时可以进行快速随机访问?
(而且我知道为什么在列表中插入/删除会更快,因为它只是删除/添加了指针,但仍然必须找到对应的项目...)
container
?
我可以理解何时使用列表,但是不知道何时使用向量比在视频游戏中使用列表更好:何时可以进行快速随机访问?
(而且我知道为什么在列表中插入/删除会更快,因为它只是删除/添加了指针,但仍然必须找到对应的项目...)
container
?
Answers:
我的经验法则是,永远不会使用列表(除非您需要非常非常频繁地从大列表的中间删除内容),而且我敢肯定会对此进行辩论。
通过将容器中的所有元素都放在连续的内存中(因此更加便于缓存)而获得的速度值得抵消添加/删除/调整向量大小的额外费用。
编辑:只是要澄清一点,当然应该不言而喻,应该在具有任何与您的特定需求相关的任何数据集的平台上测试任何一种“更快”的问题。如果我只需要一个元素集合,那么除非有充分的理由不这样做,否则我只会使用vector(或deque,这几乎是同一件事)。
您的选择应反映您的需求。向量的所有元素在内存中都是连续的,并且列表具有指向next / previous元素的指针,因此它们每个都有其优势/劣势:
清单:
向量:
因此,当您的程序需要经常添加和删除元素,但是从不访问(或很少访问)特定元素而不需要其他元素时,list会更好。应该使用向量来缩短访问时间,但是当您需要删除或添加元素时缺乏效率。
查看有关stackoverflow的这篇文章,它提供了一个非常不错的图表,其中包含有关您的需求的基本问题,根据您的答案将您带到特定的容器:
通常,列表用于诸如队列之类的结构,其中有大量的添加和删除操作。例:不断变化的应更新实体列表。列表本身仅包含屏幕上的实体,因此经常更改。
向量(或数组)更适合于变化不大且需要快速访问集合中各个项目的集合。示例:必须在给定索引处查找图块的图块地图。
Tetrads的观点可能是正确的,但这取决于所使用的编程语言。我看到您标记了您的问题c++
,但我尝试给出的答案并非特定于语言。
在主机游戏中,我们永远不会使用std :: list,因为:
甚至std :: vector在控制台上也失去了支持,因为:
struct point{float x, y, z, w}; std::vector<point> positions;