c++ - 从向量 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();
}
解决方案
这部分:
int pos = it - mEntities.begin() + 1;
不需要。您需要做的就是:
if (it != mEntities.end())
std::iter_swap(it, mEntities.end() - 1);
推荐阅读
- php - PHP 7.x SQLITE3 PDO - execute() 是否关闭了 PDO 连接?
- submenu - 我们可以在 react-admin 中为用户、帖子和仪表板添加子菜单吗?如果可以,我们如何添加?
- linux - top 命令在linux中是如何工作的?它如何提供实时输出?
- amazon-web-services - 如何在同一 AWS EB 应用程序中托管基于不同版本的路由
- elasticsearch - ElasticSearch 日期范围查询不适用于自定义日期格式
- javascript - 从我的 React 组件中的文本中打印字母,就像旧的视频游戏一样
- ios - 无法添加钥匙串项。错误 - 使用 KeychainItemWrapper 更改标识符后出现 25299?
- javascript - 我们可以同时使用 `export default` 和 `module.exports` 吗?
- angular - 为不同的 REST / WebServices 配置不同的 Angular 6 HttpClient 标头
- jquery - jQuery 选择菜单 onchange