深入理解C 11(十六)

2021-10-14 00:09:50 字數 454 閱讀 5305

unordered container無序容器

c++11增加了無序容器unordered_map/unordered_multimap和unordered_set/unordered_multiset,由於這些容器中的元素是不排序的,因此,比有序容器map/multimap和set/multiset效率更高。map和set內部是紅黑樹,在插入元素時會自動排序,而無序容器內部是雜湊表(hash table),通過雜湊(hash),而不是排序來快速操作元素,使得效率更高。由於無序容器內部是雜湊表,因此無序容器的key需要提供hash_value函式,其他用法和map/set的用法是一樣的。不過對於自定義的key,需要提供hash函式和比較函式。**清單2-6是無序容器的基本用法:

#include

#include

#include

深入理解C 11(九)

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

深入理解C 11(十二)

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

深入理解C 11(十五)

emplace back減少記憶體拷貝和移動 emplace back能就地通過引數構造物件,不需要拷貝或者移動記憶體,相比push back能更好地避免記憶體的拷貝與移動,使容器插入元素的效能得到進一步提公升。在大多數情況下應該優先使用emplace back來代替push back。所有的標準庫...