簡體   English   中英

std :: vector中的emplace_back如何工作?

[英]How does `emplace_back` in an `std::vector` work?

我注意到std::vector中的emplace_back更改了先前矢量元素的地址。 為什么?

從后備存儲的角度來看,您push還是emplace都沒有關系。 參數存在區別。

因此,通常的重定位機制已經到位。 當前分配的連續存儲空間用完時,它們將移動元素。

迭代器失效的規則保持不變。 http://en.cppreference.com/w/cpp/container/vector上檢出“ 迭代器無效 ”。

不幸的是,這是標准的:如果新的size()大於Capacity(),則所有迭代器和引用均無效。

如果向量的后備存儲的當前容量無法容納新元素,則必須分配一個新的更大的后備存儲,所有現有元素都移至該后備存儲,然后可以就地構建新元素。

使用emplace_back()不會改變后備存儲必須足夠大以適合新元素的事實。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM