STL - emplace 与 push 的区别

182 篇文章 16 订阅
这篇博客介绍了STL容器中emplace和push操作的区别。文章指出,emplace直接在容器内构造对象,避免了额外的复制,因此在某些情况下可以节省内存。以stack为例,emplace和push是相对应的,没有emplace_back等对应操作。总结了emplace的三种使用方式,并强调了其高效性。
摘要由CSDN通过智能技术生成

我的STL相关的博客目录:【STL】系列目录_Korpse的博客-CSDN博客

这里用stack来进行举例操作

第一点,push 的操作可以直接用于emplace:

    1.直接传入对象(int, double 或者 构造好了的对象)

 
  1. //假设栈内的数据类型是data

  2. class data {

  3. int a;

  4. int b;

  5. public:

  6. data(int x, int y):a(x), b(y) {}

  7. };

  8. //push

  9. data d(1,2);

  10. S.push(d) 或 S.emplace(d);

    2.在传入时候构造对象

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

  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操作,此时它们是相对应的。

(325条消息) STL - emplace 与 push 的区别_Korpse的博客-CSDN博客_emplace和push

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值