模拟实现C++的string库的改进

news2025/4/9 13:58:00

之前写过,(8条消息) 模拟实现C++的string库_Qianxueban的博客-CSDN博客

比较简单,我就直接截图的。我要改进一下。

1.改进string类中可以在字符串中存储\0

 但我写的没有这项功能,究其根本就是代码我用的都是strcpy等等函数,应该用memcpy等等函数,他就不是受\0的制约了。

 

 

 2.流插入和流提取,可以不需要用友元,以及流提取的一些小细节

 1.写流提取的话,很多的第个思路就是下面这个,一个个读;

但是,你会发现你无法结束这个函数,主要原因就是:cin无法读取空格和换行符。

回想一下,我们之前再传入多个数时,都是以空格或者换行来区分的,这就说明了cin是无法读取空格和换行符的。

 

所以就要用到istream中有一个成员函数get()可以读取这一功能的。 

 就可以初步的实现这个功能了,当然肯定还是要有一些细节来处理的:

 所以我们要清空一下s这个string。

 还有一个很细节的注意事项,所以我们会发现写代码写出bug很正常,因为我们不可以考虑到所有的情况。

 最后一点,因为我们是一个个加到,如果一次性要输入很出了字符,就要不断地扩容,可以看一下:(看结果就好了,代码我做了点修改,让他扩容的时候展现出来了)

 所以我们可以用一个数组来存储,最后一次性加上去:

 

3.resize的实现

 4.深浅拷贝

如果我们不写operator=运算符重载的成员函数,那么系统就会默认复制函数,但是这是浅拷贝

上面这个程序就会报错:为什么呢?这就要考虑到系统给我们的默认赋值函数仅仅是简单的拷贝:

 

 

 这个是最简单想到的程序,接下来就是改进他。

 最现代写法就是,让系统帮我们调用拷贝构造函数;

 5.运算符重载比较

 

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

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

相关文章

5G理论概述

文章目录 SA组网架构及协议栈4-5G核心网侧融合交互5G与4G用户标识5G网络网元和设备类型,接口1、AMF(Access and Mobility Management Function),接入和移动管理功能2、SMF(Session Management function),会话管理功能3…

MQTT快速入门

官网文档 前言: MQTT 是用于物联网连接的 OASIS 标准,它是一种基于发布订阅模式的、轻量级的消息传输协议,专为受限设备和低带宽、高延迟和不可靠的网络设计,并且能够提供一定的消息可靠性保证。得益于这些特性,MQTT…

在vite创建的vue3项目中使用Cesium标记地点(基于加载建筑样式,划分区域)

在vite创建的vue3项目中使用Cesium标记地点(基于加载建筑样式,划分区域) 使用vite创建vue3项目 npm create vitelatestcd到创建的项目文件夹中 npm install安装Cesium npm i cesium vite-plugin-cesium vite -D配置 vite.config.js文件&#…

通过平均列比较两组迭代次数

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,AB训练集各由6张二值化的图片组成,让差值结构中有6个1, 行分布是0,1,1,1,1,2列分布是2,2,2.统计迭代次…

Java-多线程编程——基础篇及相关面试题

这里写目录标题 一、前言二、进程与线程的基本概念三、为什么Java中引入多线程?3.1 并行处理3.2 提高性能3.3 提高响应能力3.4 资源共享3.5 异步编程 四、Java多线程-创建多线程的类和接口4.1 Thread类4.2 Runnable接口 五、示例代码5.1 使用Thread类创建多线程六、…

【Django学习】(十二)GenericAPIView_过滤_排序_分页

上篇文章初步接触了GenericAPIView,这次来更加深入的学习它,了解里面的一些使用和方法 get_object:源码中:处理查询集,并含有所需要得pk值,lookup_fieldget_queryset:源码中:先判断queryset是否…

全志F1C200S嵌入式驱动开发(linux移植)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面完成了uboot移植,下面就要进行linux移植。当然,理论上uboot只是为后续的os准备好了一个基础运行环境,实际运行的操作系统是不是选择linux,也不一定。如果为了实际生产的需要…

Golang环境搭建指南(Windows和linux)

前言: go语言和Java,Python,C语言等等基本一样,也是需要在系统内集成语言环境的。语言基本都一样,支持各种系统架构,比如,mac,Windows,linux系统支持。本文仅以最为常用…

Django_Paginator分页器

目录 分页器代码说明 简单demo 源码等资料获取方法 分页器代码说明 import os import random # 需要导入分页器类from django.core.paginator import Paginator, EmptyPage# 导入配置django配置文件 os.environ.setdefault(DJANGO_SETTINGS_MODULE, dailyfresh.settings)it…

Java的Hibernate框架中集合类数据结构的映射编写教程

Java的Hibernate框架中集合类数据结构的映射编写教程 一、集合映射 1.集合小介 集合映射也是基本的映射,但在开发过程中不会经常用到,所以不需要深刻了解,只需要理解基本的使用方法即可,等在开发过程中遇到了这种问题时能够查询…

《机器学习公式推导与代码实现》chapter5-线性判别分析LDA

《机器学习公式推导与代码实现》学习笔记,记录一下自己的学习过程,详细的内容请大家购买作者的书籍查阅。 线性判别分析 线性判别分析(linear discriminant analysis, LDA)是一种经典的线性分类方法,其基本思想是将数据投影到低维空间&…

openGauss学习笔记-06 openGauss 基本概念

文章目录 openGauss学习笔记-06 openGauss 基本概念6.1 数据库(Database)6.2 数据块(Block)6.3 行(Row)6.4 列(Cloumn)6.5 表(Table)6.6 数据文件&#xff08…

Opencv之角点 Harris、Shi-Tomasi 检测详解

角点,即图像中某些属性较为突出的像素点 常用的角点有以下几种: 梯度最大值对应的像素点两条直线或者曲线的交点一阶梯度的导数最大值和梯度方向变化率最大的像素点一阶导数值最大,但是二阶导数值为0的像素点 API简介: void c…

Go语言网络编程:HTTP服务端之底层原理与源码分析——http.HandleFunc()、http.ListenAndServe()

一、启动 http 服务 import ("net/http" ) func main() {http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte("ping...ping..."))})http.ListenAndServe(":8999", nil) }在 Golang只需要几行代…

MySQL存储过程和存储函数练习

创建表并插入数据 字段名 数据类型 主键 外键 非空 唯一 自增 id INT 是 否 是 是 否 name VARCHAR(50) 否 否 是 否 否 glass VARCHAR(50) 否 否 是 否 否 sch 表内容 id name glass 1 xiaommg glass 1 2 xiaojun glass 2 1、创建一个可以统计表格内记录条数的存储函数 &#…

耳夹式骨传导耳机哪个牌子好?耳夹骨传导耳机推荐

骨传导耳机品牌越来越多,选择骨传导耳机时可不是一件简单的事,在挑选的时候首先需要考虑到耳机自身的综合性能,以及耳机的配置如何都会影响到我们使用耳机的幸福感,接下来我来给大家挑选几款目前口碑不错的耳夹式骨传导耳机&#…

windows下使用cd命令切换到D盘的方法

windows下使用cd命令切换到D盘的方法 winr输入cmd进入终端

【CANFD详细介绍与CAN区别】

在汽车领域,随着人们对数据传输带宽要求的增加,传统的CAN总线由于带宽的限制难以满足这 种增加的需求。此外为了缩小CAN网络(max. 1MBit/s)与FlexRay(max.10MBit/s)网络的带宽差距,BOSCH公司推出了CAN FD。 CAN FD&…

基于控制屏障函数的安全关键系统二次规划(适用于ACC)(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 基于控制屏障函数的安全关键系统二次规划(适用于ACC)是一种用于自适应巡航控制(ACC&#x…

Servlet文档2

servlet文档2 HttpServletRequest 获取请求头API getMethod()获取请求的方式getRequestURI()获取请求的uri(相对路径)getRequestURL()获取请求的url(绝对路径)getRemoteAddr()获取请求的地址getProtocol()获取请求的协议getRem…