【1++的C++进阶】之emplace详解

news2024/9/22 7:35:16

👍作者主页:进击的1++
🤩 专栏链接:【1++的C++进阶】

在前面C++11系列的文章里,我们漏掉了几个知识点,这篇文章对其中一个知识点进行讲解,关于剩余的知识点的文章在后面会相继出炉。

C++11中,针对顺序容器(如vector、deque、list),新标准引入了三个新成员:emplace_front、emplace和emplace_back,这些操作构造而不是拷贝元素。这三个操作与push_front,insert,push_back操作相同。

下面我们以vector为例对emplace进行讲解。
在这里插入图片描述

在这里插入图片描述

通过上面两幅图的比较,我们可以看出其用法与insert较为一致,只是在第一个参数之后较为不同,emplace第一个参数后的Arg&& …args 参数包是指什么呢?
可以简单理解为就是其插入元素的构造函数需要多少参数,其就应该传多少参数。
其用法如下:

class B
{
public:
	B(int a,int b)
		:_a(a)
		,_b(b)
	{}

private:
	int _a;
	int _b;
};
void test1()
{
	vector<B> v1;
	v1.insert(v1.begin(),B(1, 2));
	v1.emplace(v1.begin(), 1, 3);
}

在这里插入图片描述
那么,既然emplace的用法与insert相似,为什么C++11中要增加它呢?
其区别是什么?
我们用下面的代码进行验证:

class B
{
public:
	B(int a,int b)
		:_a(a)
		,_b(b)
	{
		cout << "构造函数" << endl;
	}

	B(const B& b)
		:_a(b._a)
		, _b(b._b)
	{
		cout << "拷贝构造" << endl;
	}

	B(const B&& b)
		:_a(b._a)
		, _b(b._b)
	{
		cout << "移动构造" << endl;
	}

	B& operator=(const B& b) = default;//当我们显式构造了移动构造
										//编译器就不会在生成默认拷贝构造和移动赋值
private:
	int _a;
	int _b;
};

void test2()
{
	vector<B> v1;
	v1.insert(v1.begin(), B(1, 2));
	cout << "/" << endl;
	vector<B> v2;
	v2.emplace(v2.begin(), 1, 3);
}

在这里插入图片描述
通过运行结果我们可以发现,insert在插入时,由于我们传的是右值,其调用了构造和移动构造,而emplace只调用了构造函数。也就是说,emplace是在插入位置直接构造元素,而不是和insert一样,先是构造好,再移动或复制到插入位置。这样做的优势就是能够减少一次移动构造或拷贝构造。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络广播模块2*30W 智能4G广播终端开发模块

SV-704UG 4G网络广播模块2*30W 智能4G广播终端开发模块 一、描述 SV-704UG网络音频模块是一款带2*30W功放输出的4G广播音频模块&#xff0c;采用高性能ARM处理器及专业Codec&#xff0c;能接收4G广播音频数据流&#xff0c;转换成音频模拟信号输出。带有一路line in输入&#…

分布式事务解决方案之可靠消息最终一致性

分布式事务解决方案之可靠消息最终一致性 什么是可靠消息最终一致性事务 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息&#xff0c;事务参与方(消息消费者)一定能 够接收消息并处理事务成功&#xff0c;此方案强调的是只要消息发给事务参与方最终…

java项目线上cpu过高如何排查

1、查看进程 # 查看cpu过高的进程 top -c2、拿着pid查找cpu过高的线程 # 查找 ps H -eo pid,tid,%cpu | grep 19235可以看到19236过高 3、线程转换16进制 printf "%x\n" 192364、查看代码地址 # 19235 进程 # 4b24 线程16进制 # -A20 前20行 jstack 19235 | gr…

回顾2023百度云智大会:人工智能的未来之路

原创 | 文 BFT机器人 在2023年的百度云智大会上&#xff0c;各界的科技专家、学者、企业家和创新者再次齐聚一堂&#xff0c;共同探讨和分享最新的人工智能、大数据、云计算等前沿技术和行业趋势。此次大会以"探索未来科技趋势"为主题&#xff0c;旨在引领行业对未来…

奥威BI系统:时刻跟着需求走,随需分析

面对同一张报表&#xff0c;不同浏览者有不同的需求&#xff0c;那怎么办&#xff1f;有能够时刻跟着浏览者需求走的数据分析报表吗&#xff1f;还真有&#xff0c;奥威BI系统随需分析&#xff0c;随时跟着需求走。 奥威BI系统中的报表就约等于一个平台&#xff0c;可随时展开…

科技资讯|Vision Pro头显无损音频仅限USB-C AirPods Pro 2耳机

彭博社的马克・古尔曼在最新发布的推文中表示&#xff0c;苹果 Vision Pro 头显的无损音频仅限于 USB-C AirPods Pro 2 耳机。 新款采用 USB-C 的 AirPods Pro 2 升级到了 IP54 级别&#xff08;原版不防尘&#xff0c;仅 IPX4 级抗水&#xff09;&#xff0c;可陪伴用户在恶劣…

el-table树形结构 当前行为子级时无高亮效果(已解决)

需求&#xff1a;el-table行点击时需要高亮当前行。 问题&#xff1a;当el-table为树形结构时&#xff0c;点击子级却无高亮效果。 问题描述 如图所示的树形表格&#xff1a; 点击父级有高亮效果&#xff0c;点击子级高亮效果消失。 问题分析 通过查看html源码发现高亮样式…

第一次部署机器学习模型

一、说明 自从我开始机器学习以来&#xff0c;Jupyter Notebooks一直是我最忠实的伙伴。从数据预处理到模型训练、微调和测试&#xff0c;Jupyter Notebooks 在每一步都为我提供支持。然而&#xff0c;我一直都知道&#xff0c;在这些数字页面之外&#xff0c;还有一个完整的世…

软件测试常问面试题

1、讲一下你最熟悉的模块是怎么测试的&#xff1f; 2、fiddler如何抓https请求&#xff1f; 步骤&#xff1a; 设置浏览器http代理 安装证书 导入证书&#xff0c;端口号8888 手机端获取fiddler的地址&#xff0c;配置无线局域网代理&#xff0c;安装手机证书。 3、jmeter如何参…

河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

河北省图书馆典藏《乡村振兴振兴战略下传统村落文化旅游设计》许少辉八一新著

win10系统解决文件共享不安全, 需要smb1的问题

(1) 步驟一:Window按鍵加 q,搜选择控制命板 (2) 选择程序与功能 (3) 启用和关闭window功能 (4)勾上SM1 (4) 在打开的运行窗口中&#xff0c;输入命令gpedit.msc&#xff0c;然后点击确定按钮。 (5)在管理模板,打开Lanman工作站 (5) 启用不安全登录 (6)重启后生效

springboot web 增加不存在的url返回200状态码 vue 打包设置vue.js 单文件使用

spring boot项目增加 html web页面访问 1. 首先 application.properties 文件中增加配置&#xff0c;指定静态资源目录&#xff08;包括html的存放&#xff09; spring.resources.static-locationsclasspath:/webapp/,classpath:/webapp/static/ 2. 项目目录 3. 如果有实现 …

查询IP地址可得到哪些信息

通过IP地址定位&#xff0c;可以获取一些基本的信息&#xff0c;包括以下内容&#xff1a; 1. 地理位置&#xff1a;你可以确定IP地址所在的地理位置&#xff0c;包括国家、州或省、城市和地理坐标。这通常是通过将IP地址与地理位置数据库进行匹配来实现的。 2. ISP&#xff…

视频号爆款数据在哪里获取?

说到视频号爆款&#xff0c;很多人还是好奇在哪里获取&#xff0c;今天我们就来说视频号爆款数据排行榜&#xff0c;可以获取的链接地址方式有哪些&#xff01; 视频号爆款数据排行榜获取方式 该数据平台目前有微信公众号&#xff1a;视频下载plus提供开发支持&#xff0c;用户…

yolov5 v7.0自动标注

文章目录 1、概述2、使用 1、概述 在学习深度学习的时候有一个非常头疼的事情就是标注&#xff0c;特别浪费时间和费眼睛&#xff0c;最近在网上发现博主开源了自动标注的程序&#xff0c;原理是&#xff0c;通过训练好的模型&#xff0c;对图像进行推理&#xff0c;通过推理出…

制作ubuntu18.04系统盘

文章目录 前言一、下载ubuntu18.04的iso文件二、制作u盘系统盘2、使用ultra来制作系统盘2.1、加载iso2.2、制作系统盘 前言 安装ubuntu18.04系统 一、下载ubuntu18.04的iso文件 打开下面的网址&#xff0c;找到自己需要的iso文件 https://releases.ubuntu.com/二、制作u盘系…

小程序中如何查看指定会员的付款记录

在小程序中&#xff0c;我们可以通过一些简单的步骤来查看指定会员的付款记录。下面是具体的操作流程&#xff1a; 1. 找到指定的会员卡。在管理员后台->会员管理处&#xff0c;找到需要查看付款记录的会员卡。也支持对会员卡按卡号、手机号和等级进行搜索。 2. 查看会员卡…

CVE-2023-1454:Jeecg-Boot SQL注入漏洞复现

文章目录 Jeecg-Boot SQL注入漏洞(CVE-2023-1454)复现0x01 前言0x02 漏洞描述0x03 影响范围0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 Jeecg-Boot SQL注入漏洞(CVE-2023-1454)复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事…

[当人工智能遇上安全] 9.基于API序列和深度学习的恶意家族分类实例详解

您或许知道&#xff0c;作者后续分享网络安全的文章会越来越少。但如果您想学习人工智能和安全结合的应用&#xff0c;您就有福利了&#xff0c;作者将重新打造一个《当人工智能遇上安全》系列博客&#xff0c;详细介绍人工智能与安全相关的论文、实践&#xff0c;并分享各种案…

C++数据结构X篇_13_二叉树基本概念、性质及表示法

文章目录 1. 二叉树基本概念1.1 定义1.2 逻辑结构&#xff1a;1.3 基本特征1.4 基本形态&#xff1a;1.5 问题 &#xff1a;&#xff08;仅做了解&#xff09; 2. 二叉树性质2.1 性质1&#xff1a;在二叉树第i层上至多有2的(i-1)次方个节点&#xff08;i>0&#xff09;2.2 性…