emplace操作是C 11的新功能,新引入的三个成员emlace_front、empace和emplace_back,位于容器头部、指定位置这些操作构造而不是拷贝元素到容器中,是最高效接口,尽量这些操作替换对应的push_front、insert 和push_back
两者的区别
调用insert时,会将元素类型的对象传递给insert,并将元素的对象复制到容器中。 emplace将参数传递给元素类型的构造函数,emplace使用这些参数直接在容器管理的内存空间中构建元素。 所以是最有效率的。
例子
假设d是Date类型的容器。
//使用三个参数的Date构造函数在容器管理的内存空间中生成新元素。
d.emplace_back(「2016 "、" 05 "和" 26 " );
//错误,push_back没有这样的用法
d.push_back(「2016 "、" 05 "和" 26 "
//push_back )创建临时对象并将该临时对象复制到容器中
d.push_back(date(「2016”、“05”和“26”)
通过实例发现,与insert相比,利用C 11的新特性emplace在容器中添加新元素,在容器管理的内存空间中构建新元素,不需要构建临时对象,减少了内存开销。
Note
emplace函数直接在容器中构建元素,传递给emplace函数的参数必须与元素类型的构造函数匹配。