如何在 c++ 中修改 std::list 元组中的值?

How to modify a value in a tuple in a std::list in c++?

提问人:Arabella Turner 提问时间:4/13/2018 更新时间:4/13/2018 访问量:505

问:

我有一个元组列表,我正在使用迭代器对其进行迭代。我正在尝试更新元组中的一个值,用于列表中未立即删除的每个元组。更新在我迭代时进行,但在我离开 while 循环后它不会持续存在。

我的代码如下所示,其中 SpecialAttacks 是在其他地方定义的函子:

void implement_Special_Attacks(std::list<std::tuple<SpecialAttack*, int>> attacks){

    std::list<std::tuple<SpecialAttack*, int>>::iterator i = attacks.begin();

    while (i != attacks.end())
    {
        std::tuple<SpecialAttack*, int> tup = *i;
        SpecialAttack* attack = std::get<0>(tup);
        int timer = std::get<1>(tup);

        bool b = special_attack(timer, attack);

        if (b){
            i= attacks.erase(i++);
        }
        else
        {
            std::get<1>(tup)--;
            ++i;
        }
    }
}
列出 C++11 元组 STD

评论

1赞 Lingxi 4/13/2018
您正在传递值。
0赞 Arabella Turner 4/13/2018
你是什么意思?
2赞 Lingxi 4/13/2018
怎么样 ?void implement_Special_Attacks(std::list<std::tuple<SpecialAttack*, int>>& attacks)
0赞 Arabella Turner 4/13/2018
我现在觉得自己很傻。谢谢灵犀!那行得通!
0赞 Ken Y-N 4/13/2018
还需要在内部循环中,或者实际上只是没有它,什么都不做。std::tuple<SpecialAttack*, int> &tup = *i;auto &tup = *i;std::get<1>(tup)--;

答: 暂无答案