通过快速迭代按值从任何位置删除的容器

时间:2012-03-29 09:18:11

标签: c++ performance stl linked-list containers

我试图制作塔防游戏,我正在为精确半径的快速查找实体实现游戏地图。我使用std :: list(对于快速push_back实体指针,并且从列表的任何点删除都不错),但我发现迭代1500列表的元素是超长的。我的游戏甚至不能达到10 FPS。我将展示MSVS在分析器中显示的内容:

Profiler hot call stack

在getEntitiesInRadius调用next之后

是!=运算符,它与列表的结尾进行比较。接下来是==操作员调用。它以调试模式运行。但我认为即使是调试迭代1500元素太长。也许我错了这个断言?

1 个答案:

答案 0 :(得分:0)

我认为你的地图在游戏中的大小是固定的吗?如果你想要“最快”,std::list根本不是一个好的选择,我会从vector开始,只有在这还不够时我会看其他解决方案。

你说你使用list来表示'fast push_back',但除非正在调整矢量大小(可以使用reserve来避免,当然在固定大小的实体上(如游戏地图所示)),push_back在矢量上将更快。 删除可能会更慢(但没有给出)。

最重要的是,对调试版本的性能测试根本没有意义,首先要确保在尝试解决之前出现问题!