" предварительное выделение " здесь означает не изменение размера вектора до конечного размера, как это делает vector<string> result(tmp.size());
, а резерв память для окончательного размера:
vector<string> result;
result.reserve(tmp.size());
Как уже упоминалось в комментариях, это просто означает оптимизацию производительности. Это не меняет поведение кода. Вызов reserve
вызовет выделение блока памяти, достаточно большого для хранения окончательного размера вектора, но пока не создаст ни одного из элементов, что все равно будет сделано с push_back
.
Это оптимизация производительности, потому что в противном случае окончательный размер неизвестен вектору, и поэтому может потребоваться перераспределить блоки памяти несколько раз в течение l oop, что (асимптотически для больших размеров) увеличит время, которое занимает l oop постоянным фактором, если предположить, что длина строк ограничена, а вызов mph->getValue()
равен O(1)
, в противном случае эффект будет менее значительным.