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函數的參數必須與元素類型的構造函數相匹配。