结论:关于容器(vector,map,deque等)的插入操作能用emplace就用emplace。除非创建临时变量的代价真的很小。
理由: emplace相关函数可以减少内存拷贝和移动。
emplace有几个兄弟姐妹,emplace_front、emplace和emplace_back,这些操作构造而不是拷贝元素。这些操作分别对应push_front、insert和push_back,允许我们将元素放置在容器头部、一个指定位置之前或容器尾部。
当调用push或insert成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中。而当我们调用一个emplace成员函数时,则是将参数传递给元素类型的构造函数。emplace成员使用这些参数在容器管理的内存空间中直接构造元素。
emplace 最大的作用是避免产生不必要的临时变量,所以使用emplace函数进行插入的话,可以节约拷贝移动操作。
emplace的用法和insert相同,但是emplace可以接受任何类型的参数,只要与构造函数的元素类型相匹配。
map类型的emplace用法有的不同,请注意。