在C++ 11中引入了shrink_to_fit
來補充某些STL容器(例如,std::vector
,std::deque
,std::string
)。是shrink_to_fit將`std :: vector`減小到其大小的正確方法嗎?
Synopsizing,其主要功能是請求與之相關聯的容器減小其容量以適合其尺寸。然而,這個請求是不具有約束力的,並且容器實現可以自由地優化,否則將該向量的容量保留爲大於其大小。
此外,在以前的SO問題中,OP不鼓勵使用shrink_to_fit
將其std::vector
的容量減小到其大小。該理由不這樣做引述如下:
shrink_to_fit
什麼也不做,或者給你緩存局部性的問題,它是O(n)與 執行(因爲你必須每個項目複製到其新的,小家)。 通常將內存留在內存中會更便宜。 @Massa
有人能這麼好心來解決以下問題:
- 不要在報價參數持有?
- 如果是,將STL容器容量縮小到其大小的正確方法是什麼(至少對於
std::vector
)。 - 如果還有更好的方法來縮小容器,那麼
shrink_to_fit
究竟存在的原因是什麼?
沒有一種便攜的方式可以100%可靠地獲得大小等於其容量的矢量。 'shrink_to_fit'禮貌地請求實施,以便儘可能地接近這個目標。一般來說,縮小容器沒有更好的辦法。 –