簡體   English   中英

std :: vector :: reserve失效

[英]std::vector::reserve Invalidation

如果我調用std::vector::reserve為我的向量保留一定數量的內存,那么這個內存是否會被分配,直到我銷毀我的vector或者是否有任何方法調用(可能是clear )將釋放我的保留內存?

編輯 :我將重復使用容器很多次,所以出於性能原因我想避免內存分配。 正是出於這個原因,我預先保留了內存,所以我想確定我沒有做任何事情來丟失分配的內存。

clear只影響大小,而不影響容量。 C ++ 11中的shrink_to_fit可能就是你要找的東西。

編輯:我將重復使用容器很多次,所以出於性能原因我想避免內存分配。 正是出於這個原因,我預先保留了內存,所以我想確定我沒有做任何事情來丟失分配的內存。

你只需要避免兩件事:

1. shrink_to_fit ,但它只是一個釋放內存的請求,它不是向量實際執行此操作的必要條件。

2.只有使用空向量進行swap才能確保更改容量(請參閱參見ideone ):

vector<int> v;
v.reserve(100);
vector<int>().swap(v);
ASSERT(v.capacity() == 0);

無論是pop_back清除還是調整大小都不會降低矢量容量。

順便說一下,考慮使用std :: array <>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM