emplace_back能通過引數構造物件,不需要拷貝或者移動記憶體,相比pusk_back能更好的避免記憶體的拷貝和移動,使容器插入元素效能得到進一步提公升。幾乎所有的標準庫容器都增加了型別的方法:emplace,emplace_hint,emplace_front,emplace_after和emplace_back。
基本用法:
#include #includeusing
namespace
std;
struct
a };
intmain()
用法還是很簡單的,直接通過建構函式的引數就可以構造物件,當然,要求物件有相應的建構函式,如果沒有建構函式會報錯。
emplace_back相對push_back更有效能優勢。
#include #include#include
using
namespace
std;
struct
a
a(const a &a): x(a.x), y(a.y), name(std::move(a.name))
};int
main()
//執行結果:
--insert--construct
move
move
--emplace--construct
move
--emplace_back--construct
--push_back--construct
move
move
可以看出不管map還是vector,emplace系列方法在效能上面都優於之前的方法,所以盡可能的使用emplace系列方法,不過前提是型別必須有相應的建構函式。
c++11提供了無序容器unordered_map/unordered_multimap和unordered_set/unordered_multiset,由於這些容器中的元素是不排序的,所以效能高於map/multimap和set/multiset。map和set是紅黑樹,在插入元素時會自動排序,而無序容器內部是雜湊表,通過hash,而不是排序來快速操作元素,使得效率更高。
對於自定義型別,無序容器的key需要提供hash_value函式,其他用法和map/set的用法是一樣的。不過對於自定義的key,需要提供hash函式和比較函式。
對於基本型別來說,不需要提供hash函式和比較函式,用法和map/set一樣。
C 11 標準庫筆記1
stl standard template library,標準模板庫 初始化 int values 引入 range based for 迴圈 for decl coll forward list,單向鍊錶實現 2 關聯式容器 associative container 已排序的集合,大都有二叉樹...
C 11標準庫thread簡介
1.建立執行緒物件 1 不代表任何執行執行緒的物件 thread noexcept 2 fn為可呼叫物件 函式 仿函式 過載 運算子的類 初始化為 class lame表示式 args為與之同步的一包引數列表 備註 類的成員函式作為可呼叫物件時,第一引數必須是該成員函式的位址,第二引數應為該類。仿函...
C 標準庫 C 11新特性
c 定義了nullptr以取代0或者null。nullptr是std nullptr t型別的 constexpr 變數。std nullptr t可以顯式或隱式地轉換為任何指標 包括類的成員函式指標 但不能顯式或隱式地轉換為任何其他型別。range based for迴圈 類似於別的語言中的for...