Какой контейнер STL для удаления промежуточных элементов?

Мне нужно выбрать контейнер для хранения указателей на определенный мной тип ( Частица ). Я использую предварительно выделенный объект Particle Object Pool (который содержит объекты, предварительно выделенные в std :: vector).

Мои эмиттеры частиц запрашивают частицы у Particle Pool, когда им нужно испускать, (чтобы избежать распределения частиц в игре). Когда срок действия частицы истекает, она возвращается в пул объектов частиц.

Как вы можете видеть, когда я просматриваю свой эталонный контейнер частиц (нужно выбрать один), чтобы обновить его, мне нужно будет проверить, какие частицы имеют expired ( life <= 0.0 ) и вернуть их обратно в пул частиц, просроченные частицы могут находиться в любом месте контейнера.

Я думал об использовании std :: list , вот почему:

Список (AFAIK) обеспечивает постоянную вставку времени в начале и постоянное удаление времени в любой момент (при условии, что вы выполнили итерацию до этой точки).

Любые предложения или улучшения моей системы, чтобы лучше разместить ваш контейнер предложения приветствуются.

РЕДАКТИРОВАТЬ :

Чтобы объяснить себя немного лучше:

Время жизни частиц в эмиттере не точно такое же, оно зависит от диапазон, например 5,0 секунд + - (от 0,0 до 0,5). Это сделано для того, чтобы дать частицам элемент случайности, и выглядит лучше, чем все в фиксированное время.

Псевдокод алгоритма:

    // Assume typedef std::container_type<Particle *> ParticleContainer

void update(float delta)
{   
    ParticleContainer::iterator particle = m_particles.begin();   

    for(; particle != m_particles.end(); ++particle)
    {
        updateParticle(*particle, delta);         //Update the particle

        if ( (*particle)->lifeTime <= 0.0 )
        {
            ParticlePool.markAsFree(*particle);   //Mark Particle as free in the object Pool
            m_particles.remove(*particle);        //Remove the Particle from my own ParticleContainer
        }   
    }
}
5
задан Goles 10 March 2011 в 20:12
поделиться