[英]C++ STD Containers: std::vector - Is there a way to clear the vector and retain storage allocation?
有沒有辦法在保留內存分配的同時清除std::vector
的內容?
這樣做的原因是我有一段代碼循環,我希望優化它。 我目前將數據存儲在std::vector
。 每次循環開始時,應清除向量的內容。 然后我使用push_back
將數據輸入到向量中,但是由於向量的長度在循環的迭代之間不經常改變,我理想情況下希望向量將其分配的存儲保留在內存中。
如果vector
無法做到這一點,是否可以使用另一種快速訪問 STD 類型?
首先看看這里:
所以標准似乎並沒有規定容量在清除后不變。 但在實踐中通常會這樣做。
但是,您可以做兩件事:
更新:此處提供的答案有問題:
答案中的理由基於此:在調用 Reserve() 之后發生的插入期間不應進行重新分配,直到插入將使向量的大小大於 capacity() 的值。
這是在 C++ 標准中。
你可以試試這個:
v.reserve(v.capacity());
v.clear();
但是該標准沒有規定容量是否通過 clear 改變,也沒有規定 Reserve 子句是指調用 reseve 時的容量,還是插入時的容量。
更新:有關 C++ 標准委員會討論板上關於此問題的相關討論,請參閱: https ://cplusplus.github.io/LWG/issue1102
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.