xcluindo elementos de um vet

O código C ++ a seguir preenche um vetor com vários objetos e remove alguns desses objetos, mas parece que ele exclui os errados:

vector<Photon>  photons;

photons = source->emitPhotons();    // fills vector with 300 Photon objects

for (int i=0; i<photons.size();  i++) {
    bool useless = false;

    // process photon, set useless to true for some

    // remove useless photons
    if (useless) {
        photons.erase(photons.begin()+i);
    }
}

Estou fazendo isso corretamente? Estou pensando na linhaphotons.erase(photons.begin()+i); pode ser o problema?

questionAnswers(10)

yourAnswerToTheQuestion