首頁  >  文章  >  後端開發  >  為什麼 `push_back` 在向量中多次呼叫複製建構子?

為什麼 `push_back` 在向量中多次呼叫複製建構子?

DDD
DDD原創
2024-11-03 15:39:30962瀏覽

Why Does `push_back` Invoke the Copy Constructor Multiple Times in a Vector?

向量推回中複製建構子的多次呼叫

在給定的程式碼片段中,向量物件myints 的向量副本構造函數超過兩次,與最初的預期相矛盾。這引發了有關向量內部行為的問題。

解釋:

第一次推回:

  • A使用x 將新元素插入向量中。這會觸發一次複製操作:使用參數初始化新元素。因為 x 的預設建構子會將 my_int 初始化為零,所以複製建構子會報告零。

第二次推回與重新分配:

  • 第二個元素是推回。然而,向量的容量已超出,需要重新分配。由於 Myint 缺少隱式移動建構函數,因此使用複製建構子。
  • 第一個元素被複製到新記憶體中,保留其零值。隨後,複製 x 以初始化第二個元素,並將 my_int 設為 1,如複製建構子的輸出所示。
  • 這將導致總共 3 次複製建構函式呼叫。

呼叫次數:

  • 由於初始向量容量的原因,複製建構函式呼叫的次數可能會因不同的實作而異。不過,最少調用兩次。
  • 可以避免重新分配,從而減少複製操作,透過使用 Reserve(2) 提前增加向量的容量。

減少複製操作:

  • 或者,emplace_back 方法可用於元素插入。它不需要複製或移動,直接將參數轉發給元素的建構子。

總之,push_back 方法可能會因為內部向量重組而導致多次複製建構函式呼叫。為了避免這種情況,可以使用reserve()來增加容量,或者可以使用emplace_back來有效地插入元素而無需複製。

以上是為什麼 `push_back` 在向量中多次呼叫複製建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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