La forma "correcta" de hacer esto es usar un algoritmo:
#include <algorithm>
#include <functional>
// this is a function object to delete a pointer matching our criteria.
struct entity_deleter
{
void operator()(Entity*& e) // important to take pointer by reference!
{
if (e->GetXPos() > 1.5f)
{
delete e;
e = NULL;
}
}
// now, apply entity_deleter to each element, remove the elements that were deleted,
// and erase them from the vector
for_each(Entities.begin(), Entities.end(), entity_deleter());
vector<Entity*>::iterator new_end = remove(Entities.begin(), Entities.end(), static_cast<Entity*>(NULL));
Entities.erase(new_end, Entities.end());
Ahora sé lo que estás pensando. Estás pensando que algunas de las otras respuestas son más cortas. Pero, (1) este método normalmente se compila para codificar más rápido; intente compararlo, (2) esta es la forma "adecuada" de STL, (3) hay menos posibilidades de errores estúpidos, y (4) es más fácil lea una vez que pueda leer el código STL. Vale la pena aprender a programar STL, y sugiero que consultes el gran libro de Scott Meyer "Effective STL", que contiene muchos consejos STL sobre este tipo de cosas.
Otro punto importante es que al no borrar elementos hasta el final de la operación, los elementos no necesitan mezclarse. GMan sugirió usar una lista para evitar esto, pero usando este método, toda la operación es O (n). El código de Neil anterior, en cambio, es O (n^2), ya que la búsqueda es O (n) y la eliminación es O (n).
favor etiquetar sus preguntas con el lenguaje/entorno que esté utilizando, así que sabemos lo que está utilizando desde la página principal (y obtendrá muchos más puntos de vista). – Zifre
¡Pero no sabes lo que está haciendo con el vector en el resto de su código! En general, un vector debe ser el contenedor de primera elección, en igualdad de condiciones. –
En general, debe preferir los algoritmos STL a los bucles escritos a mano. – rlbond