當前位置:首頁 > 芯聞號 > 充電吧
[導讀]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?=?'