C++_简单模拟实现string的基本结构

C++中,string早于STL问世。使用string中的构造函数可以实现对string类型的字符串的一系列操作。

今天来模拟C++中的string的基本结构。注意仅仅是简单模拟,string内部结构其实非常复杂,并且不同版本的IDEstring的内部结构也不尽相同。尽管有所不同,但是各个版本的string实现的效果大致一致。真正的string是大佬团队努力的智慧结晶,而今天只是菜鸟一人自己模拟着玩儿hh

string的增删查改近期也会对其进行简单模拟。

目录

一、初始化

二、模拟c_str

三、模拟size

四、模拟操作符[ ]

五、模拟迭代器iterator


一、初始化

在C++中,string类型的变量,如果不对它进行赋值就初始化,那么它的初始值为空,而不是随机值。那么,要模拟实现string,除了设计有参数的构造函数外,还要设计无参构造函数。

如下,就是设计好了的无参构造函数和带参数的构造函数:

 调用下面的函数,调试、运行:

 

可见,s1和s2均被正常赋值。 

当然,上述的两个构造函数,它们是可以合二为一的,像这样: 

经调试运行,也是可以得到预期的结果的,这里不再演示了。

记得加上析构函数,用于销毁空间:

 

二、模拟c_str

众所周知,在C语言当中,字符串是用数组来实现的,而在C++中,既可以用数组也可以用string。那么c_str的作用就是将string的字符串转换成C语言中数组实现的字符串。 

详细用法、用例请参照cplusplus.com/reference/string/string/c_str/

现在,要模拟c_str,并不复杂,只需要以下代码即可:

调用下面的函数,得到了预期的结果:

三、模拟size

代码如下:

 

可以看到,不论是模拟size还是c_str都用了const修饰了函数体。这是因为,这两个函数不需要对类成员进行修改,只读即可,一定程度增强代码健壮性。

四、模拟操作符[ ]

不同于c_str和size,操作符[ ]可读也可写,所以他就需要重载,一个需要用const修饰函数体,一个不需要修饰。

代码如下:

经测试,可得到预期结果:

不仅可以读,还可以写入数据:

五、模拟迭代器iterator

需要先进行定义,typedef char* iterator,然后构造函数begin和end:

调用以下函数,得到了预期的结果:

这是只读版本:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FLAC格式如何转换为MP3?分享三种方法!

在数字音乐的世界中,FLAC和MP3是两种常见的音频格式。FLAC (Free Lossless Audio Codec)提供无损的音质,但文件大小较大。而MP3文件较小,更易于传输和保存,但可能牺牲一些音质。如果你想将FLAC音频转换成MP3格式,本文将…

java版本企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发

java版本企业电子招标采购系统源码Spring Cloud Spring Boot 二次开发 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草…

数学建模学习之简单设备分配问题

简单的设备分配问题 某公司新购置了某种设备 6台,欲分配给下属的4 个企业,已知各企业获得这种设备后年创利润如表 1.1 所示,单位为千万元。问应如何分配这些设备能使年创总利润最大,最大利润是多少? 表1.1的数据为: 对…

MYSQL学习第一天

1.创建数据库,删除数据库,查询创建数据的语句,使用数据库,查询当前默认的数据库以及使用的编码方式校验规则 1.1 创建数据库 create database db_name; 1.2 使用数据库 use db_name; 1.3 查询当前使用的数据库 select datab…

计讯物联网关型水利遥测终端机TY910确保闸站自动化监测长效运行

闸站是我国水利建设工程的重要组成部分,具备调度水源、防洪排涝、灌溉等能力,在农业、水路运输、养殖业等行业领域起着关键作用,进而解决区域水资源不均衡的问题,促进水资源多方面的利用。当前,我国闸站存在数量多、分…

第三次CCF计算机软件能力认证

第一题:门禁系统 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。 每位读者有一个编号,每条记录用读者的编号来表示。 给出读者的来访记录,请问每一条记录中的读者是第几次出现。 输入格式 输入的第一行包含一个整…

回归预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-CNN-BiLSTM鲸鱼算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计学习总结参考资料 预测效果 基本介…

尚硅谷Docker实战教程-笔记12【高级篇,Docker-compose容器编排】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【基础篇,Docker理念简介、官网介绍、平台入门图解、平台架构图解】…

使用Word轻松实现PDF转Word

以前WPS还能通过每天打卡白嫖会员,最近不行了,害,羊毛没了 现在重新回归Word,利用Word就可以将PDF转化为Word 一、通过Word新建一个Word文档并打开 二、点击 文件 —> 打开 三、浏览,找到要转的PDF 四、点击确定&…

Spring Bean生命周期以及PostProcessor后置处理器

简介 所谓Bean的生命周期,就是一个 Bean 从创建到销毁,所经历的各种方法调用。 一个Bean的生命周期分为四个阶段: 实例化(Instantiation):Spring容器负责创建Bean的实例,可以通过构造方法或者无参构造方法进行实例化…

VMWare在Ubuntu系统下无法启动问题

项目场景: 在Ubuntu系统安装了VMWare虚拟机,已开始还能打开VMWare,能进入正常VM界面。最近怎么进入不了VM主界面。启动虚拟机发现报错:Unable to install all modules. See ****; 问题描述 1、启动VMware:提示内核需…

QT检测USB HID设备的拔插

网上的参考代码很多,比如下面这个: QT 检测hid设备拔插打印设备信息_qt hid打印机_研知电子的博客-CSDN博客 但是,参考了很多人的代码,写出来的发现检测不到USB HID设备的拔插。 明明其他人都可以正常使用,那问题应…