If you're going to be doing a lot of insertion / removal of particles from the vector, I'd suggest using the
std::list instead, whose insertion and removal algorithms run in constant time. You're going to be iterating through all of the particles anyway, so random access isn't required.
Here's why I think the std::list is better suited for the particle engine...
Once the particle emitter expires, you don't want to remove all the particles right away - you usually want to have the particles continue one last cycle. Terminating the particle emitter will terminate all particles once their life-energy reaches zero. If you use a std::vector, you have two options: remove the particle on the spot, or use an if-condition in the render loop of the particle to check if its life-energy is zero (and if it is, don't render it). The first option is an expensive operation, and the second option forces you to check whether or not the particle has expired EVERY CYCLE (the time it takes for a simple if-condition to execute isn't great on its own, but it adds up once you have 1000+ particles).
With the std::list, removing the particle on the spot is done in constant time, so the second option isn't even worth considering in this case.
Just my two cents... Feel free to debate my methods - there is obviously more than one way to implement this.