gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:51:56 26 4
gpt4 key购买 nike

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

我对指针感到很困惑。例如,我有以下类(class):

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

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

有人可以给我建议吗!告诉我是否需要添加更多代码,我认为这就足够了谢谢。

最佳答案

您正在按值将 AsteroidGen 传递给函数。这意味着创建了它的拷贝,并且该函数在本地拷贝上运行,该拷贝在函数结束时被丢弃。小行星确实从列表中删除,但从存储在拷贝中的列表中删除。

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

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

关于c++ - 使用指针从 std::list 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com