首頁  >  文章  >  後端開發  >  Reserve 是否確保元素插入期間向量引用的有效性?

Reserve 是否確保元素插入期間向量引用的有效性?

Linda Hamilton
Linda Hamilton原創
2024-10-24 10:02:30753瀏覽

Does Reserve Ensure the Validity of Vector References During Element Insertion?

從同一向量中推送元素

在某些向量操作中,例如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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn