c++ - 为什么这个函数从迭代器中得到错误的参数?
问题描述
我正在为 uni 上的 IT 项目编写 Space Invaders 克隆。所有方法都有效,但我在删除敌人时遇到了问题。
我重做我的代码以使用迭代器。我将敌人存储在 Enemy 的向量(垂直)的向量(水平)中。该代码工作正常,直到我一次发射超过 2 个弹丸时它给我一个错误。
if (projectiles.size() != 0)
{
for (auto itr_columns = enemies.begin(); itr_columns != enemies.end(); itr_columns++)
{
for (auto itr_rows = itr_columns->begin(); itr_rows != itr_columns->end();)
{
if (projectiles.size() == 0)
{
break;
}
for (auto itr_projectiles = projectiles.begin(); itr_projectiles != projectiles.end();)
{
if (itr_projectiles->Collision(*itr_rows))
{
itr_projectiles = projectiles.erase(itr_projectiles);
itr_rows = itr_columns->erase(itr_rows);
}
else
{
itr_rows++;
itr_projectiles++;
}
}
}
}
}
这就是我得到的错误: line: if (itr_projectiles->Collision(*itr_rows))
表达式:不能取消引用超出范围的向量迭代器
解决方案
看说明:
itr_rows = itr_columns->erase(itr_rows);
通过这样做,您在循环中时使itr_columns的迭代器无效,而循环确实使用了这些迭代器。
当您处于循环中时,切勿调用使迭代器无效的函数。
推荐阅读
- android - Firebase RecyclerView 图片未显示,其余信息为
- excel - Mac:Excel VBA - 使用 XPath 向网站发出 HTTP 请求并获得价值
- c# - 从 httpclient 的响应字符串中的键中获取值
- python - 如何在 Python 中修复“TypeError:并非所有在字符串格式化期间转换的参数”
- javascript - AngularJS 在 ng-repeat 元素中附加 HTML
- firebase - 离子存储不更新值
- r - 为什么在 map() 调用中使用 with() 作为函数在此示例中不起作用?
- laravel - 自定义 mime 不工作的错误消息
- assembly - 程序收到信号 SIGSEGV,分段错误。0x56557055 in final()
- python - 在 Psychopy 中获得键盘响应