C++ Primer笔记——explicit、string流、vector比较、emplace

news2025/1/18 23:16:06

目录

一.P265 抑制构造函数定义的隐式转换

二.P287 string流

三.P304 vector的比较

四.P307 在容器中特定位置添加元素


一.P265 抑制构造函数定义的隐式转换

举个例子,如果构造函数参数是string类型,那么当使用赋值符号进行初始化操作时,实际上是将string隐式转换成临时目标类,再将临时对象通过拷贝构造给真正对象。

当不希望发生隐式类型转换时,需要使用explicit关键字。

class A {
	string str;
public:
	explicit A(const string& _str)
		:str(_str)
	{}
};

string s = "hello";
A a(s);//正确
A a("hello");//正确
A a = s;//错误

使用explicit有几点需要注意:

1.只能用于构造函数

2.只能用于单参数构造函数

3.类外定义构造函数时不能重复书写。

4.可以显式强制转换。

A a = static_cast<A>(s);

二.P287 string流

使用string流时,初始化对象形式可能如下:

string str = "hello";
stringstream ss(str, ios_base::out);

这里需要注意,ss是将str拷贝了一份,并不是直接使用str。 

因此使用时不管是读还是写,都是对那份拷贝的string操作,不影响str本身内容。

ss << "world";
cout << str << endl;
cout << ss.str();

三.P304 vector的比较

如果是对vector对象直接比较,那么会有以下比较顺序:

1.从下标0处开始比较

2.先按元素大小进行比较

3.如果大小全部相同,按数组长度比较

vector<int> a = { 1, 2, 3, 4 };
vector<int> b = { 1, 2, 3, 4 };
vector<int> c = { 1, 3, 3, 4 };
vector<int> d = { 1, 2, 3, 4, 5, 6 };

a == b//true
a > c//false,c值大于a
a == d//false, a长度小于d

四.P307 在容器中特定位置添加元素

C++中对于范围的操作,均秉持着左闭右开原则,即[ , )。

因此,许多函数的参数含义一目了然。

比如insert当参数为迭代器时,含义是插入此迭代器前一个位置,符合“右开”。很好理解,因为insert支持迭代器为end(),而end代表结尾的下一个位置,此位置自然是不能插入数据的,因此是插入前一个位置。 

返回值是新元素的位置。

emplace函数可以很好代替push和insert函数,因为emplace的形参是万能引用,既支持左值也支持右值

 因此,当使用右值传参时,不需要拷贝,能节省资源。

同时,参数还是可变参数,这样emplace就支持一些push所不能完成的:

class A {
	string str;
	int i;
	double d;
public:
	A(const string& _str, int _i, double _d)
		:str(_str)
		,i(_i)
		,d(_d)
	{}
};

vector<A> v;
v.insert(v.begin(), A("hello", 1, 3.14));//正确
v.insert(v.begin(), "hello", 1, 3.14);//错误
v.emplace(v.begin(), "hello", 1, 3.14);//正确


如有错误,敬请斧正

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

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

相关文章

leetcode -- ⽤最少数量的箭引爆⽓球(452)

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一…

数据模型篇之阿里巴巴数据整合及管理体系

第9章 阿里巴巴整合及管理体系 OneData的设计是为了建设统一的、规范化的数据接人层&#xff08; ODS &#xff09;和数据中间层&#xff08; DWD和DWS &#xff09;&#xff0c;通过数据服务和数据产品&#xff0c;完成服务于阿里巴巴的大数据系统建设 &#xff0c;即数据公共…

2022 年 11 月区块链操作系统的开发回顾

查看 Cartesi Machine、Cartesi Rollups 和 Noether 的更新正在寻找区块链操作系统组件的最新进展&#xff1f;你找对地方了&#xff01;正如在我们的路线图文章中所描述的那样&#xff0c;我们一直在朝着定期且频繁的更新方向发展着&#xff0c;以便让我们的社区能够及时的了解…

微服务框架 SpringCloud微服务架构 多级缓存 46 JVM 进程缓存 46.1 导入商品案例【MySQL环境准备】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存46 JVM 进程缓存46.1 导入商品案例【MySQL环境准备】46.1.1 导入商品管理案例46 JVM 进程缓存 用于在T…

新冠疫情下免疫的重要性以及肠道菌群在其中的作用

今年是新冠病毒影响的第三年了&#xff0c;在病毒的影响下&#xff0c;我们的生活方式发生了很大的变化。近日&#xff0c;多地政府颁布了疫情防控的新政策&#xff0c;除了一些特殊场所&#xff0c;出入其他场所不用扫场所码了。 从一方面说&#xff0c;这样的情况方便了我们日…

DAP数据分析平台可视化组件开发

企业信息化建设会越来越完善&#xff0c;越来越体系化&#xff0c;当今数据时代背景下更加强调、重视数据的价值&#xff0c;以数据说话&#xff0c;通过数据为企业提升渠道转化率、改善企业产品、实现精准运营、有效运营&#xff0c;用数据来指引企业的发展。 组件使用是在DA…

第一章:Pytorch简介和其三大核心概念

文章目录一&#xff1a;什么是Pytorch二&#xff1a;Pytorch优势三&#xff1a;Pytorch三大核心概念&#xff08;1&#xff09;tensor&#xff08;张量&#xff09;&#xff08;2&#xff09;autograd&#xff08;自动微分-变量&#xff09;&#xff08;3&#xff09;nn.Module…

java计算机毕业设计基于安卓Android的校园安保巡查系统APP

项目介绍 校园安保巡查系统APP管理是校园安保巡查系统管理中对学生必不可少的一个部分。在人们校园安保巡查系统管理的整个过程中,校园安保巡查系统APP管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类校园安保巡查系统APP管理程序也在不断改进。本课题所设计的校园…

精华推荐 |【Redis技术探索】「底层架构原理」帮你彻底搞定Sentinel的实现原理运作机制

&#x1f46e;‍每日一句 最美好的生活方式是和一群志同道合的人&#xff0c;一起奔跑在理想的路上&#xff0c;回头有一路的故事&#xff0c;低头有坚定的脚步&#xff0c;抬头有清晰的远方&#xff01; &#x1f46e;‍ Sentinel存在的意义 &#x1f46e;‍ Sentinel出现的前…

如何快速传输大文件,介绍大文件快速方法

现在&#xff0c;企业比以往任何时候都面临着一个重大挑战&#xff1a;需要一个快速共享文件的解决方案。但是&#xff0c;并非所有快速文件传输解决方案都以相同的速度传输文件。文件大小、端点位置、路径、设备、防火墙、网络系统和加密需求都会限制文件的传输速度。 什么是快…

[附源码]Python计算机毕业设计个人相册管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Java中的String类

一、String类的体系图 简单解释&#xff1a;1、String类实现了Serializable接口&#xff0c;说明String类可以串行化&#xff0c;可以进行网络传输。2、String类实现了Comparable接口&#xff0c;说明String对象可以进行比较。 二、String类介绍 String类是lang包中的类&…

【LeetCode每日一题】——337.打家劫舍 III

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 树 二【题目难度】 中等 三【题目编号】 337.打家劫舍 III 四【题目描述】 小偷又发现了一个…

数据指标体系的建设思考(三)

一、数据指标体系搭建流程 01、如何搭建数据指标体系 ▶ “德勤”的数据指标体系方法论 首先&#xff0c;我们先来学习一下优秀的数据指标体系搭建方法论。数据指标体系搭建方法论有不少优秀的方案&#xff0c;大部分都大同小异&#xff0c;在这里我们来聊一下“德勤”推荐的…

论文投稿指南——中国(中文EI)期刊推荐(第7期)

&#x1f384;&#x1f384; EI是国际知名三大检索系统之一&#xff0c;在学术界的知名度和认可度仅次于SCI&#xff01; 【前言】 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊。其中&#xff0c;中文期刊的…

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作

目录 1--开操作 2--闭操作 3--基本梯度计算 4--顶帽操作 5--黑帽操作 6--代码实例 1--开操作 ① 原理&#xff1a;先进行腐蚀操作&#xff0c;再进行膨胀操作&#xff1b; ② 作用&#xff1a;消除值高于邻近点的孤立点&#xff0c;达到去除图像中噪声的作用&#xff0…

Python零基础入门篇- Python的加密模块 - hashlib 与 base64

我们来学习一下 Python 中的加密模块&#xff0c;加密模块在工作中被广泛应用。比如数据的传入 不希望被捕获&#xff0c;通过把数据加密。这样即使被捕获也无法获取到数据的真实信息&#xff0c;今天我们就来学习一下关于加密的方法。 hashlib 模块 hashlib 模块的介绍 hashl…

SSH远程免密登录的两种方式

SSH远程免密登录的两种方式一、ssh远程登录操作1.先ping测试下看看网络是否通畅2.ssh 192.168.150.148二、ssh免密登录方式一1.生成公钥、私钥2.拷贝公钥到目标服务器3.测试ssh免密登录三、ssh免密登录方式二1.生成本机的公钥私钥2.打开本地公钥文件复制公钥信息3.将公钥存放到…

[虚幻引擎] UE4/5数字孪生 制作城市光束效果

一、模型导入 二、创建材质 创建材质曲线&#xff0c;为了能够更好的实现颜色的渐变过程&#xff0c;这里用了RGB三种颜色 三、创建蓝图BP_LightBeam 在构造函数中实现逻辑首先我们的思路是要制作数量不同的光束那么我们就要循环&#xff0c;循环的次数可根据你想要的数量来设…

BAT大厂都在用的Docker。学会这三招,面试、工作轻松hold住

上期我们以Jenkins为例&#xff0c;一边实战一边了解Docker的基础命令。这期&#xff0c;我们将带大家使用Docker搭建三个平时测试工作中非常有用的小工具。学会这三个实战之后&#xff0c;你就可以说对Docker不是浅尝即止在理论阶段&#xff0c;而是真正有一定了解&#xff0c…