首先,我知道矢量会更容易。但是,这是一个类,列表有助于排序。现在,我有一个指向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 更改为列表吗?
答案 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);如果你需要你的逻辑,那就减少了。