查找列表中的特定项目

时间:2014-03-25 01:40:59

标签: c++ list iterator

首先,我知道矢量会更容易。但是,这是一个类,列表有助于排序。现在,我有一个指向Sprite对象的指针列表。我想从列表中的第二项开始,并在它们上运行一些方法,但我不知道如何从第二项开始,以及如何从列表中访问Sprites函数。

以下是相关代码。

    list<Sprite*>::iterator iter = sprites.begin();
    iter++;
    iter++;
    while (iter != sprites.end())               //Missile Movement
    {
        dynamic_cast<Missile*>(sprites[iter])->Update();

        if (!dynamic_cast<Missile*>(sprites[iter])->GetActive())
        {
            delete sprites[iter];
            sprites.erase(iter--);
        }

        iter++;
    }

目前,代码设置为使用Sprite指针向量。我无法使用当前代码调用对象上的Update或GetActive。你们能帮助我了解如何更改语法以将 sprites 更改为列表吗?

2 个答案:

答案 0 :(得分:2)

list<Sprite*>::iterator iter = sprites.begin();
if (sprites.size() < 2) throw std::runtime_error("too few sprites");
iter++;
iter++;
while (iter != sprites.end())               //Missile Movement
{
    if (Missile* p = dynamic_cast<Missile*>(*iter))
    {
        p->Update();
        if (!p->GetActive())
        {
            delete p;
            iter = sprites.erase(iter);
        }
        else
            ++iter;
    }
    else
        std::cerr << "WARN: sprite is not a missile\n";
}

答案 1 :(得分:0)

而不是使用索引符号sprite [iter],只需取消引用迭代器,就像* iter。

此外,erase()调用会产生问题,因为对象在后递减时已被破坏。而是使用返回值,例如iter = sprites.erase(iter);如果你需要你的逻辑,那就减少了。