深入理解C 11(十五)

2021-10-13 22:42:59 字數 461 閱讀 3541

emplace_back減少記憶體拷貝和移動

emplace_back能就地通過引數構造物件,不需要拷貝或者移動記憶體,相比push_back能更好地避免記憶體的拷貝與移動,使容器插入元素的效能得到進一步提公升。在大多數情況下應該優先使用emplace_back來代替push_back。所有的標準庫容器(array除外,因為它的長度不可改變,不能插入元素)都增加了類似的方法:emplace、emplace_hint、emplace_front、emplace_after和emplace_back,關於它們的具體用法可以參考cppreference.com。這裡僅列舉典型的示例。

vector的emplace_back的基本用法如下:

#include

#include

using

namespace std;

struct a

深入理解C 11(九)

move語義 我們知道移動語義是通過右值引用來匹配臨時值的,那麼,普通的左值是否也能借助移動語義來優化效能呢,那該怎麼做呢?事實上c 11為了解決這個問題,提供了std move方法來將左值轉換為右值,從而方便應用移動語義。move是將物件的狀態或者所有權從乙個物件轉移到另乙個物件,只是轉移,沒有記...

深入理解C 11(十二)

改進物件池模式 物件池對於建立開銷比較大的物件來說很有意義,為了避免重複建立開銷比較大的物件,可以通過物件池來優化。物件池的思路比較簡單,事先建立好一批物件,放到乙個集合中,每當程式需要新的物件時,就從物件池中獲取,程式用完該物件後都會把該物件歸還給物件池。這樣會避免重複建立物件,提高程式效能。物件...

深入理解C 11(十六)

unordered container無序容器 c 11增加了無序容器unordered map unordered multimap和unordered set unordered multiset,由於這些容器中的元素是不排序的,因此,比有序容器map multimap和set multiset...