To answer your question why someone would want to reduce a vector without deallocating, here is another scenario I'm currently working on:
I need a continuous buffer whose size is not known a priori so I use a vector to build it up. I'm actually going to need this many many times (>100k) during the execution of the program and each time the buffer may be slightly different in size. I want to recycle this buffer so I don't incur the expensive reallocation every cycle. The first few cycles are quite expensive since they reallocate several times during all the push_backs. After the first 100 cycles though, the capacity of the vector has grown to size where it is big enough to hold what it needs thus, I'm no longer allocating and deallocating memory every cycle and I'm only using about as much memory as is needed (important when running with many threads and potentially bumping into the total system RAM).