跳轉到內容

更多 C++ 慣用法/清空並最小化

來自華夏公益教科書

清空並最小化

[編輯 | 編輯原始碼]

清空容器並最小化容器的容量。

這有時被稱為“與臨時變數交換”慣用法。

標準庫容器通常分配的記憶體比實際元素數量要多。這種策略可以最佳化在容器大小增加時節省一些分配。另一方面,當容器大小減小時,容器中通常會有剩餘的容量。容器的剩餘容量可能是對記憶體資源的浪費。清空並最小化慣用法已被開發用於清空容器並將額外的容量減少到最少(為零),從而節省記憶體。

解決方案和示例程式碼

[編輯 | 編輯原始碼]

實現清空並最小化慣用法與下面給出的示例一樣簡單。

std::vector<int> v;
//... Lots of push_backs and then lots of removes on v.
std::vector<int>().swap (v);

語句的第一部分std::vector<int>()建立一個臨時vector<int>,它保證分配零原始記憶體或實現的最小值。語句的第二部分使用非丟擲交換慣用法將臨時變數與v交換,這是一種高效的做法。交換後,編譯器建立的臨時變數將超出範圍,而v最初持有的記憶體塊將被釋放。

C++11 中的解決方案

[編輯 | 編輯原始碼]

從 C++11 開始,一些容器聲明瞭shrink_to_fit()函式,比如 vector、deque 和 basic_string。shrink_to_fit()是一個非繫結請求,用於將capacity()減少到size()。因此,使用clear()shrink_to_fit()是一個非繫結請求,用於清空並最小化。

已知用途

[編輯 | 編輯原始碼]
[編輯 | 編輯原始碼]
華夏公益教科書