c++ - 在这种情况下如何从 vector 中删除一个项目?

标签 c++ vector erase

我尝试的所有操作都出现语法错误。有人可以告诉我用什么代替评论吗?这是我第一次使用 vector 。

EntityList 是 Entity 类的静态 vector 。

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>”

我看到的所有示例都使用 int 作为参数,所以我不知道该怎么做。

此外,由于 vector 中的元素在删除后向下移动,我是否应该在删除项目后递减 i 以便它再次执行具有相同值的循环?或者有更优雅的方法吗?

最佳答案

你可以试试:

Entity::EntityList.erase(Entity::EntityList.begin() + i);

是的,你应该减少 i。

关于c++ - 在这种情况下如何从 vector 中删除一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369568/

相关文章:

c++ - 迭代 std::deque 时删除元素时出现段错误

c++ - Eclipse CDT : running C++ program not showing anything in the console! 为什么?

c++ - 创建结构 vector ,保留空间,C++

c++ - 如何从指向 vector 迭代器的指针中找到索引

具有构造函数的类的 C++ vector

MySQL:列数据是否在更新/删除时从硬盘驱动器中安全删除?

c++ - SearchPathW 卡住

c++ - 如何使用 range-v3 成对地转换范围?

c++ - 传递与 `swprintf` %s"` 说明符匹配的 `char const*` 时 `L"的行为

c++ - 试图从用户 C++ 输入的代码中删除注释