加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C Vector.erase()最后一个元素破坏了迭代器

发布时间:2020-12-16 10:13:36 所属栏目:百科 来源:网络整理
导读:我目前遇到vector.erase()的问题. vectorgameObject gameObjects;for (auto it = gameObjects.end() - 1; it != gameObjects.begin();) { if ((it)-getDestroyed()) { it = gameObjects.erase(it); } else { --it; } } 所以gameObject是游戏中所有内容的基类
我目前遇到vector.erase()的问题.

vector<gameObject> gameObjects;

for (auto it = gameObjects.end() - 1; it != gameObjects.begin();)
    {
        if ((it)->getDestroyed()) {
            it = gameObjects.erase(it);
        }
        else {
            --it;
        }
    }

所以gameObject是游戏中所有内容的基类,它有一个bool标志,基本上告诉我们对象是否被破坏.如果设置了标志,则应从向量中删除该标志.

class gameObject
{
protected:
    bool toBeDestroyed;
public:
    bool getDestroyed();
    void markToDestroy();
};

现在第一个被破坏的对象被成功地从向量中移除然后我得到一个错误:迭代器不是可解除引用的,指向第73行(?)处的向量库.

然后我检查msvc调试器.在数据预览中,它显示迭代器指向gameObjects的最后/最新元素.然后将其删除(擦除(it))并且在数据预览不变的情况下,调用它 – > getDestroyed()会导致错误消息.

调试断言失败了!矢量迭代器不可解除引用.

PS:我检查了cplusplus.com,vector.erase应该返回一个新的,有效的迭代器,所以我不知道我在哪里弄乱它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读