STL - emplace 與 push 的區別

(我的STL相關的博客目錄:https://blog.csdn.net/Kprogram/article/details/90408011

這裏用stack來進行舉例操作

第一點,push 的操作可以直接用於emplace:

    1.直接傳入對象(int, double 或者 構造好了的對象)

//假設棧內的數據類型是data
class data {
  int a;
  int b;
public:
  data(int x, int y):a(x), b(y) {}
};
//push
data d(1,2);
S.push(d) 或 S.emplace(d);

    2.在傳入時候構造對象

S.push(data(1,2));
S.emplce(data(1,2));

    3.emplace可以直接傳入構造對象需要的元素,然後自己調用其構造函數!

S.emplace(1,2)

    意思是,emplace這樣接受新對象的時候,自己會調用其構造函數生成對象然後放在容器內(比如這裏傳入了1,2,它則會自動調用一次data(1,2))

    而push,只能讓其構造函數構造好了對象之後,再使用複製構造函數!

    相當於emplace直接把原料拿進家,造了一個。而push是造好了之後,再複製到自己家裏,多了複製這一步。

    所以emplace相對於push,使用第三種方法會更節省內存。

 

注意:emplace_back(type) 對應 push_back(type)

           emplace(i, type) 對應於 insert(type, i)

           emplace_front(type) 對應於 push_front()

但是!對於stack 和 queue,只有push操作,所以也只有emplace操作,此時它們是相對應的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章