我尝试的所有内容都出现语法错误。有人可以告诉我代替评论的内容吗?这是我第一次使用矢量。
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&lt; _Myvec&gt;'
我看到的所有示例都使用ints作为参数,因此我不知道该怎么做。
此外,由于向量中的元素在移除后向下移动,我应该在移除一个项目之后递减i,以便它再次执行具有相同值的循环吗?或者有更优雅的方式吗?
答案 0 :(得分:2)
你可以尝试:
Entity::EntityList.erase(Entity::EntityList.begin() + i);
是的,你应该减少我。
答案 1 :(得分:2)
我建议使用Erase/Remove idiom。您可以将std::remove_if的结果提供给vector::erase,您应该全部设置完毕。它看起来像这样:
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;
}
如果您可以帮助它,我建议不要修改向量的内容。如果你需要在游戏循环结束时删除死实体,那么你最好弄清楚哪些实体“死了”,把它们放在“死列表”中,然后从你的“死列表”中删除任何内容实体列表一次全部。