簡體   English   中英

C++ STD 容器:std::vector - 有沒有辦法清除向量並保留存儲分配?

[英]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 類型?

有沒有辦法在保留內存分配的同時清除 std::vector 的內容?

是的,您調用std::vector::clear()方法,如文檔中所述

保持向量的容量()不變

首先看看這里:

清除向量會影響其容量嗎?

所以標准似乎並沒有規定容量在清除后不變。 但在實踐中通常會這樣做。

但是,您可以做兩件事:

  1. 在循環開始時在向量上使用 reseve,這樣每個循環只有一個分配。 這很簡單。
  2. 您可以以索引方式使用您的向量。 這似乎更理想,但更難做到。

更新:此處提供的答案有問題:

標准對矢量調用 clear 如何改變容量有什么說法?

答案中的理由基於此:在調用 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.

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