我需要选择一个容器来保存指向我定义的类型的指针 ( Particle
)。我正在使用预分配的粒子Object Pool
(其中包含在 std::vector 上预分配的对象)。
我的粒子发射器在需要发射时向粒子池询问粒子(以避免游戏中的粒子分配)。当一个粒子过期时,它会返回到粒子对象池。
如您所见,当我遍历我的粒子参考容器(需要选择一个)以更新它时,我将不得不检查哪些粒子已过期(lifetime <= 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
}
}
}