Что касается push_back (), который медленен, а резерв не помогает, реализация STL, используемая в MSVC, работает примерно так: когда вы впервые создаете вектор, он резервирует пространство для 10 элементов. С тех пор всякий раз, когда он заполняется, он резервирует пространство в 1,5 раза больше количества элементов в векторе. Итак, что-то вроде 10, 15, 22, 33, 49, 73, 105, 157 ... Перераспределения дороги.
Даже если вы не знаете точный размер, Reserve () может быть полезным. Reserve () не предотвращает рост вектора, если это необходимо. Если вы зарезервировали (), и вектор вырос за пределы этого размера, вы все равно улучшили положение из-за резерва. Если вектор оказывается намного меньше, ну, может быть, это нормально, потому что производительность в целом работает лучше при меньших размерах.
Вам нужно зарегистрироваться в режиме RELEASE, чтобы точно знать, какая стратегия работает лучше всего.