列表c++如何编辑特定元素

List C++ how to edit specific element

本文关键字:元素 编辑 c++ 何编辑 列表      更新时间:2023-10-16

我对列表有点困惑。见下文:

int ParticleSystemManager::CreateParticleSystem()
{
    ParticleSystem* system = new ParticleSystem(Vector3(), Vector3(), 10, 1);
    system->SetLifeTime(200);
    list<ParticleSystem>::iterator it = particleSystems.begin();
    particleSystems.insert(it, *system);
    selectedParticleSystem = system;
    return 0;
}

我想做的是得到我刚刚创建的粒子系统,将其添加到粒子系统列表中,但我也想将添加的粒子系统存储在一个指针中。我注意到,虽然,当通过列表迭代的内存位置是由selectedParticleSystem指针存储的位置不同。我怎样才能使它们一样呢?更新如下:

void ParticleSystemManager::Update(float elapsedTime)
{
    for (std::list<ParticleSystem>::iterator iterator = particleSystems.begin(), end = particleSystems.end(); iterator != end; ++iterator) 
    {
        iterator->Update(elapsedTime);
    }
}

我注意到,虽然,当通过列表迭代的内存位置是由selectedparticlessystem指针存储的位置不同。

这是因为std::list::insert创建了对象的副本

你的选择是:

  1. 创建指针的list(尽管出于一些原因,您可能希望使用智能指针代替)。

  2. 获取指向列表内对象的指针,并将其存储。比如:

    selectedParticleSystem = &(*particleSystems.insert(it, *system));
    

    如果你这样做,你当然需要delete的原始对象,否则你会有内存泄漏。

Oli的回答:如果你使用c++ 11,你可以使用emplace代替,直接在列表中创建新的particlessystem:

particleSystems.emplace(particleSystems.begin(),Vector3(), Vector3(), 10, 1);
particleSystems.begin()->SetLifeTime(200);
selectedParticleSystem=particleSystems.begin();