c++ - 在列表中查找特定项目

标签 c++ list iterator

首先,我知道 vector 会更容易做到这一点。但是,这是针对一个类的,列表有助于排序。现在,我有一个指向 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 指针 vector 。我无法使用当前代码对对象调用 Update 或 GetActive。你们能帮我理解如何更改语法以将 sprites 更改为列表吗?

最佳答案

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

关于c++ - 在列表中查找特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623946/

相关文章:

java - 当一个列表不稳定时如何比较两个列表的顺序

c++ - 将空范围(相同的迭代器)传递给 STL 算法是否会导致定义的行为?

c++ - Boost序列化示例错误: symbol(s) not found for architecture x86_64

c++ - std::atomic 中的自定义类型

c++ - 删除内部析构函数调用

python - 在 Python 中对二维列表进行排序

c++ - 计算组合时溢出

python - 如何拆分字典中的列表以创建一个新列表?

C++ STL 迭代器接口(interface)

c++ - 我可以迭代一个迭代器范围内但不在另一个迭代器范围内的元素吗?