從同一向量中推送元素
在某些向量操作中,例如push_back,可能需要重新分配內部容量。這可能會引發對向量中先前元素的引用有效性的擔憂。
將同一向量中的元素推入自身時會出現這樣的問題:
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
在第二次push_back之後操作時,向量的記憶體分配可能已更改,從而導致對第一個整數(即v[0])的引用無效。
或者,考慮以下程式碼:
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
透過在第二次push_back之前呼叫reserve,我們確保向量有足夠的容量來容納新元素而無需重新分配。這保證了對第一個整數的參考即使在操作之後仍然有效。
根據 LWG 缺陷報告 526 的建議解決方案,可以理解,第一個程式碼範例是有效的,因為需要 vector::push_back在這種情況下工作。然而,為了保持對先前元素的引用的有效性,謹慎使用保留或替代方法以避免潛在的重新分配。
以上是Reserve 是否確保元素插入期間向量引用的有效性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!