從a previous question about vector capacity,貝利先生說:C++的std :: vector的內存/分配
在當前的C++可以保證不發生重新分配後的呼叫保留,直到插入將採取大小超出值之前的預留通話。在保留呼叫之前,或者在呼叫保留時,如果大小介於之前保留的呼叫的值和容量之間,則允許實施儘早重新分配。
因此,如果我理解正確,爲了確保在容量超過之前不會發生重新分配,我必須做兩次儲備?你能澄清一下嗎?
我使用矢量作爲這樣的存儲棧:
std::vector<double> memory;
memory.reserve(size);
memory.insert(memory.end(), matrix.data().begin(), matrix.data().end()); // smaller than size
memory.resize(memory.capacity(), 0);
我需要保證重新分配並不在上述情況發生。
謝謝。
PS:我也想知道是否有比矢量
好的,謝謝。 我不是說英語的人,那句話對我來說有點困惑 – Anycorn 2010-05-03 22:20:52
@Mark,我覺得這個條目不太清楚。 C++的0 23.3.6.2.2 FCD更清晰:作用:一個指令,通知向量計劃的更改大小,以便它可以相應地管理存儲分配。在reserve()之後,如果 重新分配發生,capacity()大於或等於reserve的參數;並等於先前的capacity()的值,否則。當且僅當當前容量小於reserve()的參數時,此時重新分配 。如果除非通過非CopyConstructible類型的移動構造函數引發異常 ,則不會有效果。 – 2010-05-03 23:31:31