[英]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.