【STL】C++11新特性emplace操作

emplace操作是C++11新特性,新引入的的三個成員emlace_front、empace 和 emplace_back,這些操作構造而不是拷貝元素到容器中,這些操作分別對應push_front、insert 和push_back,允許我們將元素放在容器頭部、一個指定的位置和容器尾部。

兩者的區別 
當調用insert時,我們將元素類型的對象傳遞給insert,元素的對象被拷貝到容器中,而當我們使用emplace時,我們將參數傳遞元素類型的構造函,emplace使用這些參數在容器管理的內存空間中直接構造元素。

例子 
假定d是一個Date類型的容器。 
//使用三個參數的Date構造函數,在容器管理的內存空間中構造新元素。 
d.emplace_back(“2016”,”05”,”26”);

//錯誤,push_back沒有這種用法 
d.push_back(“2016”,”05”,”26”);

//push_back()創建一個臨時對象,然後將臨時對象拷貝到容器中 
d.push_back(Date(“2016”,”05”,”26”));

通過例子發現,使用c++11新特性emplace向容器中添加新元素,在容器管理的內存空間中構造新元素,與insert相比,省去了構造臨時對象,減少了內存開銷。

Note 
emplace函數在容器中直接構造元素,傳遞給emplace函數的參數必須與元素類型的構造函數相匹配。

發佈了84 篇原創文章 · 獲贊 145 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章