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相比,省去了構造臨時物件,減少了記憶體開銷。
注意:emplace函式在容器中直接構造元素,傳遞給emplace函式的引數必須與元素型別的建構函式相匹配。
這個函式就是更加簡便的插入函式,不過針對自定義的變數型別,可以直接把建構函式的引數通過這個函式直接插入,這樣比使用push_back等等更加方便,很不錯的函式
C Primer學習筆記
學習完乙個知識點後寫上自己的理解。算是總結吧,加深一下自己的印象,也可以在以後複習的時候方便檢視 加油加油!14.1關於運算子的過載 存在的意義 目前看來就是因為操作符大部分是針對資料的,比如int型,char型,書中稱為內建型別。而當類之間想要用操作符的時候,比如兩個類的物件相加,那麼就需要去重 ...
《C Primer》學習筆記
2008年7月18日 颱風海鷗登陸 1 宣告與定義 變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。變數的宣告用於向程式表明變數的型別和名字。變數的宣告包括物件名 物件型別和物件型別前的關鍵字extern 當設計標頭檔案時,記住定義和宣告的區別是很重要的...
c primer學習筆記
3.2 標準庫型別string 1.注意在使用empty size 和is x 這種函式時請注意其使用的方法,例如 string s hello world if s.empty empty 和size 更像是一種屬性 if is x s 0 is 這種函式更像是一種函式,而且是針對的單個字元 2....