STL C 11新特性emplace操作

2021-08-07 12:24:43 字數 721 閱讀 2400

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函式的引數必須與元素型別的建構函式相匹配。

C 11新特性學習

lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...

C 11 新特性試用

在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。各種作用域內宣告變數都可以用到它。例如,名空間中,程式塊中,或是for迴圈的初始化語句中。auto i 42 i is an int a...

C 11 新特性總結

vs2012以上版本支援 一.auto的使用 auto func less 自動表示函式指標 auto ite vector a.begin 自動表示stl的迭代器 auto p new foo 自動表示變數指標等變數 二.decltype int x 3 decltype x y x 從變數或表示...