c++ - 通过循环删除 vector 中的数据导致断点

标签 c++ visual-studio sfml

<分区>

我有一个类对象(项目符号) vector ,它在大多数情况下都有效。但是,一旦我尝试删除项目符号,它就会循环回去,然后导致断点。 “basic game.exe 已触发断点。”我试过前后迭代,但总是卡住。

我正在使用 SFML,对象是具有位置、旋转和大小的矩形。

    for (it = bullets.end(); it != bullets.begin(); it--)
    {
        it->draw(game); 
        it->move();
        if (it->bullet.getPosition().x > 800)
        {
            bullets.erase(it);
        }
    }

我是编码新手,所以如果您需要其他信息,请尝试提供。

最佳答案

当您在 vector 上调用 erase() 时,迭代器将变得无效。 相反,考虑试试这个:

 for (auto it = bullets.begin(); it != bullets.end();)
 {
    it->draw(game); 
    it->move();
    if (it->bullet.getPosition().x > 800)
    {
      it = bullets.erase(it);
    }
    else
    {
      it++;
    }
  }

关于c++ - 通过循环删除 vector 中的数据导致断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41896770/

相关文章:

c++自动判断素数

c++ - 比较以 char 形式出现的字符串**

c++ - 何时在构造函数中使用 {} ()

c++ - 使用 CMake 编译 SFML 应用程序

c++ - 如何检查点是否属于 ConvexShape?

c++ - C++ 中的高斯勒让德

c++ - Arduino 中的 Serial.print uint64_t

visual-studio - 防止 Visual Studio 在已编译的 exe 中泄漏 pdb 路径

c# - Visual Studio 编译正常,但仍然显示红线

visual-studio - 在 Visual Studio 2013 中为 CUDA 7.0 启用语法高亮