2012-04-29 50 views
0

可能重複:
How to downsize std::vector?C++:減少與標準::向量保留空間::儲備

根據cppreference,在標準::矢量::儲備(爲size_t n)的,n是「分配存儲容量所需的最小數量」。我的問題是:如何避免只知道最大值的重新分配?

作爲一個例子,假設我有一個整數列表,但我不知道這個列表的大小(例如這個列表來自讀取文件)。但我知道這個列表的最大大小是1000.假設列表的實際大小爲800.

目前,我使用std :: reserve(1000),然後使用push_back() 。使用保留我阻止任何重新分配。但是如何在push_backs結尾釋放額外的空間? (在這個例子的情況下,如何釋放1000-800 = 200多餘的空間?)

非常感謝。

回答

3

您可以使用std::vector::shrink_to_fit()

std::vector<int> v; 
v.reserve(1000); 
for(int i=0;i<800;++i) 
    v.push_back(10); 

v.shrink_to_fit(); 
+1

這需要C++ 11支持。並不保證收縮任何東西。 – 2012-04-29 02:57:40

+0

@NicolBolas是的,標準說它是一個非綁定請求,並且「注意:該請求不具有約束力,允許實現特定優化的緯度。」質量實施可以選擇不調整容量的一個例子是,當前容量已經足夠低,以至於容器正在利用像小字符串優化那樣的優勢。 – bames53 2012-04-29 03:35:25

1

您基本上需要創建一個正確大小的新矢量並交換兩個矢量的內容。幸運的是,在STL這是一個一行這裏的例子:How to downsize std::vector?

+3

所以......這是一個重複的問題。 – Potatoswatter 2012-04-29 02:22:51