<th id="ndjcx"></th>
    <span id="ndjcx"></span>
  • c語言push_back() 函數 和 emplace_back() 函數

    admin 213 0

    c語言push_back() 函數 和 emplace_back() 函數 母嬰 第1張

    C  中,使用 push_back() 函數 和 emplace_back() 函數都可以用來給容器添加元素。

    其中,emplace_back() 函數是 C  11 新增加的,其功能和 push_back() 相同,都是在容器尾部添加一個元素。

    c語言push_back() 函數 和 emplace_back() 函數 母嬰 第2張

    那么這兩個函數有什么區別呢?

    事實上,emplace_back() 和 push_back() 在底層實現機制上是不同的。

    • push_back() 在向容器尾部添加元素時,會先創建這個元素,然后再將這個元素拷貝或移動到容器中(若是拷貝的話,還需要在結束后銷毀之前創建的這個元素);

    • emplace_back() 則是直接在容器尾部創建這個元素,省去了拷貝或移動元素的過程。

    如下圖所示,

    c語言push_back() 函數 和 emplace_back() 函數 母嬰 第3張

    從上圖可以看出,push_back 比 emplace_back 多了一步移動構造。若將移動構造函數注釋掉,則結果為:

    c語言push_back() 函數 和 emplace_back() 函數 母嬰 第4張

    這時 push_back 比 emplace_back 多了一步拷貝構造。由此可以看出,push_back() 在底層實現時,會優先選擇調用移動構造函數,如果沒有才會調用拷貝構造函數。

    從上面可以看出,push_back() 的底層實現過程比 emplace_back() 更繁瑣,換句話說,emplace_back() 的執行效率要比 push_back() 高。

    因此,在實際工作中,應優先使用 emplace_back() 函數。

    抱歉,評論功能暫時關閉!