在这种情况下,如何从矢量中删除项目
How do I erase an item from a vector in this situation?
我尝试的所有内容都出现语法错误。有人可以告诉我该怎么代替评论吗?这是我第一次使用矢量。
EntityList 是 Entity 类的静态向量。
for(int i = 0;i < (int)Entity::EntityList.size();i++) {
if(!Entity::EntityList[i]) continue;
if(Entity::EntityList[i]->isDead){
//Erase from vector
//Decrement i?
}
Entity::EntityList[i]->OnLoop();
}
我应该用什么来代替评论?我已经尝试了一些方法,但没有任何效果。例如,Entity::EntityList.erase(i);不行。我收到以下错误,我不明白:
无法将参数 1 从"int"转换为"std::_Vector_const_iterator<_Myvec>"
我看到的所有示例都使用整数作为参数,所以我不知道该怎么办。
另外,由于向量中的元素在删除后向下移动,我是否应该在删除项目后递减 i,以便它再次以相同的值执行循环?还是有更优雅的方法?
你可以试试:
Entity::EntityList.erase(Entity::EntityList.begin() + i);
是的,你应该递减 i。
我建议使用擦除/删除习惯用法。您可以将 std::remove_if 的结果提供给 vector::era,您应该已经全部设置好了。它看起来像这样:
entityList.erase(
std::remove_if(entityList.begin(), entityList.end(), isEntityDead));
下面是一个示例:
#include <algorithm>
#include <vector>
class Entity {
public:
bool isDead;
};
// Need this since isDead isn't a member function of Entity
bool isEntityDead(Entity& entity) {
return entity.isDead;
}
int main(int argc, char** argv) {
Entity ent1 = Entity();
ent1.isDead = false;
Entity ent2 = Entity();
ent2.isDead = true;
Entity ent3 = Entity();
ent3.isDead = false;
std::vector<Entity> entityList;
entityList.push_back(ent1);
entityList.push_back(ent2);
entityList.push_back(ent3);
std::cout << "Before removing anything: " << entityList.size() << std::endl;
entityList.erase(std::remove_if(entityList.begin(), entityList.end(), isEntityDead));
std::cout << "After remove/erase: " << entityList.size() << std::endl;
return 0;
}
如果您可以帮助它,我建议您在循环访问时不要修改矢量的内容。如果您需要在游戏循环结束时删除死实体,那么最好弄清楚哪些实体是"死的",将它们放在"死列表"中,然后一次从实体列表中删除"死列表"中的任何内容。
相关文章:
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 在这种情况下,java对象是否可以调用本机函数
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- 在这种情况下,我真的复制了字节还是复制了字符?
- 为什么在这种情况下,bool 类型的输出等于 0?
- 在这种情况下,如何传递成员函数而不是函数?
- 为什么在这种情况下递增阵列名称有效?
- 在这种情况下我应该使用哪种设计模式
- 为什么在这种情况下我需要 .template
- 在这种情况下,使用 string_view 是否会导致不必要的字符串复制?
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- 在这种情况下,"typename..."意味着什么?
- 为什么在这种情况下 x = 44?
- 在这种情况下是私有的吗?试图使操作员<<过载
- 在这种情况下,如何防止C++输出/控制台窗体关闭
- 在这种情况下,我必须删除内存吗?
- 在这种情况下,删除指针数组期间会发生什么?
- 在这种情况下,我如何使用CRTP删除虚拟方法
- 在这种情况下,如何从矢量中删除项目
- 在这种情况下,我应该删除指针吗?