0%

push和emplace的区别

emplace是C++11标准中新增的,与push的效果相同。
但在底层实现机制上有所不同:

  1. push会先创建元素,然后将元素拷贝或移动到容器当中,若是拷贝还需要在结束后销毁之前创建的元素
  2. emplace直接在容器尾部创建元素,省去了拷贝或者移动元素的过程。

push在底层调用的时候首先调用拷贝函数,然后调用移动构造函数,如无移动构造函数则调用拷贝构造函数。
emplace直接传入构造对象需要的元素,然后调用其构造函数。

相比之下emplace更节省内存,更节省时间。

但其实C++11后,push_back在条件允许的情况下会直接调用emplace。

emplace_back(type) 对应 push_back(type)
emplace(i, type) 对应 insert(type, i)
emplace_front(type) 对应 push_front()