用法:
c.emplace_back(t)在c的尾部创建一个值为t的元素 c.emplace_front(t)在c的头部创建一个值为t的元素 c.emplace(p,t)在迭代器p所指向的元素之前创建一个值为t的元素,返回指定新添加元素的迭代器
empalce的特性:
代码演示:
#include<iostream>
#include<vector>
using namespace std;
class p
{
public:
p() { num = 100; age = 18; name = "无名氏"; }
p(int n,int a,string name) :num(n),age(a),name(name) {};
int num;
int age;
string name;
};
void test()
{
vector<p> v;
//使用三个参数的p的构造函数
v.emplace_back(520, 19, "大忽悠");
p p1;
//使用拷贝构造函数(浅拷贝)
v.emplace_back(p1);
//使用push_back
v.push_back(p1);//正确
//v.push_back(520, 19, "大忽悠");//错误,没有接收三个参数的push_back版本
//对与push_back的正确做法
v.push_back(p(520, 19, "大忽悠"));//创建一个临时的p对象传递给push_back
}
int main()
{
test();
system("pause");
return 0;
}
emplace函数的参数根据元素类型而变化,参数必须与元素类型的构造函数相匹配:
#include<iostream>
#include<vector>
using namespace std;
class p
{
public:
p() { num = 100; age = 18; name = "无名氏"; }
p(int n,int a,string name) :num(n),age(a),name(name) {};
p(int n) :num(n){}
int num;
int age;
string name;
};
void test()
{
vector<p> v;
//使用p的默认构造函数
v.emplace_back();
//使用p的有参构造--含三个参数
v.emplace_back(520, 18, "哈哈哈");
//使用p的有参构造---含一个参数
v.emplace_back(520);
}
int main()
{
test();
system("pause");
return 0;
}
总结: emplace函数在容器中直接构造元素。传递给emplace函数的参数必须与元素类型的构造函数相匹配