C11效能之道 標準庫優化

2022-05-07 00:48:14 字數 1499 閱讀 3342

emplace_back能通過引數構造物件,不需要拷貝或者移動記憶體,相比pusk_back能更好的避免記憶體的拷貝和移動,使容器插入元素效能得到進一步提公升。幾乎所有的標準庫容器都增加了型別的方法:emplace,emplace_hint,emplace_front,emplace_after和emplace_back。

基本用法:

#include #include 

using

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...