Как вы упомянули, то, что делает resize
, в точности зависит от вашей реализации (и может меняться в разных версиях одной и той же реализации).
На совместимых реализациях push_back
заставляет емкость удваиваться при каждом увеличении, и это связано с амортизируемой сложностью серии push_back
.Если бы это увеличивало емкость на 1 каждый раз, сложность для N
добавлений была бы O(N^2)
, тогда как если бы push_back
удваивала емкость каждый раз, сложность для той же серии дополнений была бы только O(N)
- большое дело.
Что касается вашего вопроса - если вы заранее знаете максимальный index
, просто заранее выделите.В противном случае, я думаю, вам лучше с std::map
:
map<int, T> M;
for (...) {
M[index] = element;
}
Это будет иметь сложность O(N log N)
для N
дополнений, но не будет тратить память на индексы, которые не имеют соответствующих element
s.