使用指针从std :: list中删除项目

时间:2012-11-30 09:43:54

标签: c++ list pointers stdlist

是否可以使用.remove从std :: list中删除对象,并将对象作为指针?

我对指针很困惑。 我有以下类,例如:

class AsteroidGen{
    public:
        std::list<Asteroid*> listAsteroids;
        void AsteroidGen::generateAsteroid(int amount, int delet);
        void AsteroidGen::DrawAsteroids();
};

它有一个指向我的小行星对象的指针列表。 因为它是一个指针,我假设我可以使用指针进行检查并删除它。

在我的主类中,我创建了一个AsteroidGen实例并填充列表并绘制它。一切正常。然后我尝试从我的子弹碰撞的列表中删除其中一个项目:

bool CheckBulletCollision(Lazer lazer, AsteroidGen asteroids){
    bool collision = false;
    for each(Asteroid *c in asteroids.listAsteroids){
        Position pos = c->pos;
        float lazx = lazer.mPos.x;
        float lazy = lazer.mPos.y;
        float lazz = lazer.mPos.z;
        float distance = sqrt(pow(pos.x - lazx, 2) + pow(pos.y - lazy, 2) + pow(pos.z - lazz, 2));
        if( distance < 2.05){
            asteroids.listAsteroids.remove(c);
            lazergone = true;
            break;
        }
    }
    return collision;
}

我尝试逐行浏览我的代码以查看出现了什么问题,但列表项目实际上并未在下一帧中删除。我可能没有正确使用指针,我仍然觉得它们很难。

请有人给我建议! 告诉我,如果我需要添加更多代码,我认为这就足够了 谢谢。

1 个答案:

答案 0 :(得分:3)

您按值将AsteroidGen传递给函数。这意味着它的复制,并且该函数在本地副本上工作,当函数结束时将被丢弃。确实从列表中删除了小行星,但是从副本中存储的列表中删除了

如果要修改函数中的AsteroidGen对象,则必须通过引用传递它:

bool CheckBulletCollision(Lazer lazer, AsteroidGen &asteroids) {
  // ... rest of code as before
}