Когда std :: vector необходимо перераспределить, он увеличивает свой размер выделения на N * 2, где n - его текущий размер. Это приводит к логарифмическому числу reallocs по мере роста вектора.
Если бы вместо этого std :: vector увеличивал свое выделенное пространство на постоянную величину, число reallocs будет расти линейно с ростом вектора.
То, что вы сделали, по существу заставило вектор расти на постоянную величину 3, что означает линейный рост. Линейный, очевидно, хуже, чем логарифмический, особенно с большими числами.
Как правило, единственный рост лучше, чем логарифмический, является постоянным. Именно поэтому комитет по стандартам создал резервный метод. Если вы можете избежать всех reallocs (константа), вы будете работать лучше, чем логарифмическое поведение по умолчанию.
Тем не менее, вы можете рассмотреть комментарии Херба Саттера о предпочтении std :: deque над вектором www.gotw.ca / gotw / 054.htm