前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >stl之emplace函数的使用

stl之emplace函数的使用

作者头像
大忽悠爱学习
发布2021-11-15 10:34:00
1K0
发布2021-11-15 10:34:00
举报
文章被收录于专栏:c++与qt学习
  • c++11新标准引入了三个新成员-------emplace_front,emplaceemplace_back,这些操作构造而不是拷贝元素,因此相比push_back等函数能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升。
  • 这些操作分别对应push_front,insert和push_back,能够让我们把元素放置在容器头部,一个指定位置之前或容器尾部

用法:

c.emplace_back(t)在c的尾部创建一个值为t的元素 c.emplace_front(t)在c的头部创建一个值为t的元素 c.emplace(p,t)在迭代器p所指向的元素之前创建一个值为t的元素,返回指定新添加元素的迭代器

empalce的特性:

  • 当调用push或insert成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中。
  • 而当我们调用一个emplace成员函数时,则是将参数传递给元素类型的构造函数
  • emplace成员使用这些参数在容器管理的内存空间中直接构造元素。

代码演示:

代码语言:javascript
复制
#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_back的调用和第二个push_back调用都会创建新的p对象。
  • 在调用第一个emplace_back时,会在容器管理的内存空间中直接创建对象。
  • 而调用第二个push_back则会创建一个局部临时对象,并不会将其压入容器中。

emplace函数的参数根据元素类型而变化,参数必须与元素类型的构造函数相匹配:

代码语言:javascript
复制
#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函数的参数必须与元素类型的构造函数相匹配

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档