c++ 我可以删除'向量'元素,同时使用它们的指针/引用来迭代它们吗?

qxsslcnc  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(146)

我有一个表示视频游戏中角色的属性修改的结构体,以及一个“耗尽”一个回合/阶段的buff的函数:

typedef struct CharacterBuff {
    BuffTypeEnum buff_type;
    int value; // < 0 for nerfs, > 0 for buffs
    int phases; // < 0 for infinite phases
} CharacterBuff;

bool pass_phase(CharacterBuff* character_buff) {
    if (!character_buff) { return false; }
    if (character_buff->phases < 0) { return false; }
    --(character_buff->phases);
    return character_buff->phases <= 0;
}

我有一个CharacterBuff结构体的向量,我循环通过这些向量,并在每个向量上使用pass_phase,如果pass_phase返回true,则删除它们。我如何以安全的方式这样做?如果可能,请批评代码中的错误,以及更好的替代方法。
我不知道如何在遍历c++向量元素时移除它以及其他向量算法,所以我没有做太多尝试,而且我搜索的其他答案也没有使用指针。

voase2hg

voase2hg1#

我发现std::remove_if可以使用引用,但不能使用指针,所以我修改了pass_phase,使用引用代替。

bool pass_phase(CharacterBuff& character_buff) {
    if (character_buff.phases < 0) { return false; }
    --(character_buff.phases);
    return character_buff.phases <= 0;
}

void pass_phase_for_buffs(std::vector<CharacterBuff>& buffs) {
    buffs.erase(std::remove_if(buffs.begin(), buffs.end(), pass_phase), buffs.end());
}

相关问题