[導讀]emplace操作是C++11新特性,新引入的的三個成員emlace_front、empace 和 emplace_back,這些操作構造而不是拷貝元素到容器中,這些操作分別對應push_front、
emplace操作是C++11新特性,新引入的的三個成員emlace_front、empace 和 emplace_back,這些操作構造而不是拷貝元素到容器中,這些操作分別對應push_front、insert 和push_back,允許我們將元素放在容器頭部、一個指定的位置和容器尾部。
兩者的區(qū)別?
當調(diào)用insert時,我們將元素類型的對象傳遞給insert,元素的對象被拷貝到容器中,而當我們使用emplace時,我們將參數(shù)傳遞元素類型的構造函,emplace使用這些參數(shù)在容器管理的內(nèi)存空間中直接構造元素。
一個例子
MyString.h
#ifndef?MYSTRING_H #define?MYSTRING_H #includeclass?MyString { public: ????MyString(const?char?*str?=?NULL);//?普通構造函數(shù) ????MyString(const?MyString?&other);//?拷貝構造函數(shù) ????~MyString(void);//?析構函數(shù) ????MyString?&?operator?=?(const?MyString?&other);//?賦值函數(shù) private: ????char?*m_data;//?用于保存字符串 }; #endif?//?MYSTRING_H
MyString.cpp
#include?"MyString.h" #include#include//普通構造函數(shù) MyString::MyString(const?char?*str) { ????if?(str?==?NULL) ????{ ????????m_data?=?new?char[1]; ????????*m_data?=?'