我需要選擇一個容器來容納指向我定義的類型的指針(Particle
)。我正在使用預先分配的粒子Object Pool
(其中包含預先分配在std :: vector上的對象)。什麼是STL容器來執行元素之間的移除?
我的粒子發射器在粒子池需要發射時要求粒子池(爲了避免遊戲中的粒子分配)。當一個粒子到期時,它返回到粒子對象池。你可以看到,當我迭代我的粒子參考容器(需要選擇一個)來更新它時,我將不得不檢查哪些粒子已經過期(lifetime <= 0.0
)並將它們返回給粒子池,過期的顆粒可能在容器中的任何位置。
我一直在思考如何使用std::list
,這裏的原因:
名單(據我所知)提供了在開始一定時間的插入和恆定時間去除在任何時候(假設你已經迭代到這一點)。
歡迎任何對我的系統的建議或改進,以便更好地適應您的容器建議。
EDIT:
爲了解釋自己好一點:
顆粒在發射極的壽命時間是不完全相同,這取決於一個範圍,例如,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
}
}
}
對於順序容器,總是從'std :: vector'開始。然後配置文件,如果容器操作是一個問題,請嘗試另一個容器。 [通常你會發現自己堅持'std :: vector'。](http://stackoverflow.com/questions/5056973/when-do-you-prefer-using-stdlistt-instead-of-stdvectort/5057001#5057001 ) – sbi 2011-03-10 19:34:05
「恆定時間」和std :: list的問題是常數很大!對於std :: vector,時間是可變的,但很小。你的選擇! :-) – 2011-03-10 19:53:43