首页 > 解决方案 > 从向量 C++ 中删除时向量迭代器不可取消引用

问题描述

我有一个向量,其中包含大量不断创建和删除的元素。
我想用最后一个元素交换必须删除的元素,然后pop_back()用来避免在向量中间删除,但我总是知道我的迭代器不可取消引用,我不太明白为什么这是一个问题。

有人可以解释到底发生了什么吗?

void EntityManager::RemoveEntity(Entity* entity)
{
    std::vector<Entity*>::iterator it = std::find(mEntities.begin(), mEntities.end(), entity);

    if (it != mEntities.end())
    {
        int pos = it - mEntities.begin() + 1;
        std::iter_swap(mEntities.begin() + pos, mEntities.end()-1);
    }
        mEntities.pop_back();
}

标签: c++vectoriterator

解决方案


这部分:

int pos = it - mEntities.begin() + 1;

不需要。您需要做的就是:

if (it != mEntities.end())
    std::iter_swap(it, mEntities.end() - 1);

推荐阅读