gpt4 book ai didi

c++ - 如何从使用 for 循环中的 vector 大小的 vector 中删除元素

转载 作者:行者123 更新时间:2023-12-01 14:10:38 25 4
gpt4 key购买 nike

我有一个游戏,我向一个物体射击子弹,然后我删除了被子弹击中的物体以及屏幕外的子弹。
例如:

std::vector<object> object_list;
for(size_t i = 0; i < object_list.size(); i++)
{

if(object_list[i].hit())
{
object_list.erase(object_list.begin() + i);
}
else
object_list[i].draw();
}
这样做的问题是,当我删除一个对象时, vector 的大小会减小,因此当它检查条件时,它会失败并且我收到诸如“vector 下标超出范围”之类的错误。我可以选择不通过渲染那些没有被击中的小行星来渲染小行星,但问题是没有。当命中( split )时,对象的数量会增加,因此最终程序会变慢。我对屏幕外的项目符号使用了类似的概念,但我找不到解决方法。我正在寻找这种或更好的删除元素方法的解决方案。
object 和 bullet 都是类。

最佳答案

您应该将 for 循环分成两部分:

  • 删除所有“命中”元素:
  • object_list.erase(std::remove_if(object_list.begin(), 
    object_list.end(), [](auto&& item) { return item.hit(); }),
    object_list.end());
  • 抽奖剩余:
  • std::for_each(object_list.begin(), object_list.end(), [](auto&& item) { item.draw(); });
    它更安全,更具可读性。

    关于c++ - 如何从使用 for 循环中的 vector 大小的 vector 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62675109/

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