gpt4 book ai didi

c++ - 用于通过快速迭代按值从任何位置删除的容器

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:10 26 4
gpt4 key购买 nike

我正在尝试制作塔防游戏,我正在实现游戏 map 以在精确半径内快速查找实体。我让它与 std::list 一起工作(用于快速 push_back 实体指针,并且从列表的任何点删除都不错),但我发现迭代列表的 1500 个元素是超长的。我的游戏甚至无法达到 10 FPS。我将展示 MSVS 在探查器中显示的内容:

Profiler hot call stack

在 getEntitiesInRadius 调用之后,接下来是 != 运算符,它与列表末尾进行比较。接下来是 == 运算符调用。它以 Debug模式运行。但我认为即使是调试迭代 1500 个元素也太长了。也许我这个说法错了?

最佳答案

我假设你的 map 在整个游戏中都是固定大小的? std::list 根本不是一个好的选择,如果你想要“最快”,我会从一个 vector 开始,只有当这还不够我d 查看其他解决方案。

你说你使用 list 来实现“fast push_back”,但除非调整 vector 的大小(这可以通过使用 reserve 来避免,当然是在固定大小的实体上(就像游戏 map 那样) ), vector 上的 push_back 会快很多。删除可能会更慢(但未给出)。

最重要的是,在调试版本上进行性能测试根本没有意义,首先要确保存在问题,然后再尝试解决它!

关于c++ - 用于通过快速迭代按值从任何位置删除的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9922450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com