向量推回中複製建構子的多次呼叫
在給定的程式碼片段中,向量物件myints 的向量副本構造函數超過兩次,與最初的預期相矛盾。這引發了有關向量內部行為的問題。
解釋:
第一次推回:
- A使用x 將新元素插入向量中。這會觸發一次複製操作:使用參數初始化新元素。因為 x 的預設建構子會將 my_int 初始化為零,所以複製建構子會報告零。
第二次推回與重新分配:
- 第二個元素是推回。然而,向量的容量已超出,需要重新分配。由於 Myint 缺少隱式移動建構函數,因此使用複製建構子。
- 第一個元素被複製到新記憶體中,保留其零值。隨後,複製 x 以初始化第二個元素,並將 my_int 設為 1,如複製建構子的輸出所示。
- 這將導致總共 3 次複製建構函式呼叫。
呼叫次數:
- 由於初始向量容量的原因,複製建構函式呼叫的次數可能會因不同的實作而異。不過,最少調用兩次。
- 可以避免重新分配,從而減少複製操作,透過使用 Reserve(2) 提前增加向量的容量。
減少複製操作:
- 或者,emplace_back 方法可用於元素插入。它不需要複製或移動,直接將參數轉發給元素的建構子。
總之,push_back 方法可能會因為內部向量重組而導致多次複製建構函式呼叫。為了避免這種情況,可以使用reserve()來增加容量,或者可以使用emplace_back來有效地插入元素而無需複製。
以上是為什麼 `push_back` 在向量中多次呼叫複製建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!