在列表中查找特定项

Finding a specific item in a list

本文关键字:查找 列表      更新时间:2023-10-16

首先,我知道向量会更容易做到这一点。但是,这是针对类的,列表有助于排序。现在,我有了一个指向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。你们能帮我理解如何改变语法改变精灵到一个列表吗?

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 missilen";
}

不使用索引符号sprites[iter],只对迭代器解引用,如*iter。

同样,erase()调用也会产生问题,因为对象在后继递减的时候已经被销毁了。而是使用返回值,如iter = sprites.erase(iter);如果逻辑上需要的话,还有递减。