В С++ 11 shrink_to_fit
был введен для дополнения некоторых контейнеров STL (например, std::vector
, std::deque
, std::string
).
Synopsizing, его основная функция - запросить контейнер, который связан с , чтобы уменьшить его емкость, чтобы соответствовать его размеру. Однако этот запрос не является обязательным, и реализация контейнера может свободно оптимизировать в противном случае и оставить вектор с емкостью больше его размера.
Кроме того, в предыдущем SO-вопросе OP не поощрялся использовать shrink_to_fit
, чтобы уменьшить емкость его std::vector
до его размера. Причины этого не приводятся ниже:
shrink_to_fit
ничего не делает или дает проблемы с локальностью кэша, а O (n) - выполнить (поскольку вам нужно скопировать каждый элемент в новый, более мелкий дом). Обычно это дешевле оставить в памяти. @Massa
Может ли кто-нибудь быть таким добрым, чтобы ответить на следующие вопросы:
- Удерживаются ли аргументы в цитате?
- Если да, то какой способ уменьшить емкость контейнера STL до его размера (по крайней мере, для
std::vector
). - И если есть лучший способ сжать контейнер, какая причина существования
shrink_to_fit
после всего?