首頁 > 後端開發 > C++ > Push_back 與 Emplace_back:什麼時候應該在 C 中使用它們?

Push_back 與 Emplace_back:什麼時候應該在 C 中使用它們?

Mary-Kate Olsen
發布: 2024-12-23 09:47:29
原創
715 人瀏覽過

Push_back vs. Emplace_back: When Should You Use Each in C  ?

Push_back 與Emplace_back:深入分析

簡介

簡介

push_back的操作常常是混亂的根源。這兩個函數都用於將元素插入容器中,但它們的行為不同,尤其是在使用右值引用時。

理解Push_back

push_back 有三個重載:一種採用const 值,一種採用右值引用,另一種採用可變數量的參數(C 11 及以上)。在右值引用的上下文中,push_back(Type&& _Val) 的行為符合預期:它直接將右值參考插入到容器中,而不建立副本。

Emplace_back 的出現

Microsoft Visual C (MSVC) 引入了一個看似冗餘的 emplace_back 版本,它採用右值引用: emplace_back(類型&&_Val)。此重載是多餘的,因為與右值參考一起使用時,它在功能上等同於 Push_back(Type&& _Val)。

Emplace_back 的真正威力

真正的emplace_back 的潛力在於其可變參數重載:emplace_back(Args&&...)。與push_back不同,此重載允許使用轉送參數直接建構容器內的物件。這消除了創建臨時物件的需要以及不必要的複製的可能性。

何時使用 Emplace_back
std::map<int, Complicated> m;
int anInt = 4;
double aDouble = 5.0;
std::string aString = "C++";

// Avoids creating temporary objects
m.emplace(4, anInt, aDouble, aString);
登入後複製

emplace_back 在建立臨時物件會產生重大損失的情況下特別有用開銷。例如,將複雜物件插入標準映射時:

MSVC 的部分實現儘管為右值引用引入了非標準emplace_back 重載,MSVC尚未實現完整的可變版本。背後的原因是當時 Visual C 10 中缺乏可變參數範本支援。

以上是Push_back 與 Emplace_back:什麼時候應該在 C 中使用它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板