È l'unico modo? Non si può semplificare ulteriormente? Tipo con il while e il metodo ispunct
È il metodo standard e più efficiente (fai una singola passata) per fare cancellazioni in un vettore; lo si può implementare tranquillamente con un while (anche se personalmente trovo più comodo un for).
Amaro C++, il gusto pieno dell'undefined behavior.