Minor performance (and/or style) improvements

Checking for emptiness using size() might be inefficient, because it can take linear time, while empty() is guaranteed to take only constant time.

For non-primitive types, postfix ++ operators are inefficient compared to prefix ++ operators, because post-increment usually involves keeping a copy of the previous value around.