[英]Control over std::vector reallocation
通過閱讀std::vector
引用我明白了
當達到最大容量時調用insert
將導致重新分配std::vector
(導致迭代器失效),因為為其分配了更大容量的新內存。 目標是保證連續數據的保證。
只要我堅持低於最大容量insert
就不會導致(並且迭代器將完好無損)。
我的問題如下:
當reserve
被自動調用insert
,有沒有什么辦法來控制多新的內存必須如何保留?
假設我有一個初始容量為100的向量,當達到最大容量時,我想分配額外的20個字節。
有可能嗎?
您可以隨時自行跟蹤並在分配之前調用預留,例如
static const int N = 20 // Amount to grow by
if (vec.capacity() == vec.size()) {
vec.reserve(vec.size() + N);
}
vec.insert(...);
您可以將它包裝在您自己的函數中並調用該函數,而不是直接調用insert()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.