【C++】深度剖析string类的底层结构及其模拟实现
文章目录
- 前言
- 1. string的结构
- 2. 构造、析构
- 2.1 无参构造
- 2.2 带参构造
- 2.3 问题发现及修改
- c_str
- operator []
- 析构
- 2.4 合二为一 ——全缺省
- 3. 拷贝构造
- 3.1 浅拷贝的默认拷贝构造
- 3.2 深拷贝拷贝构造的实现
- 4. 赋值重载
- 4.1 浅拷贝的默认赋值重载
- 4.2 深拷贝赋值重载的实现
- 5. string对象的遍历
- 5.1 【】(const版本和非const版本)
- 5.2 迭代器模拟实现(普通)
- 5.3 const迭代器模拟实现
- 6. 常见关系运算符重载
- 7. 数据插入删除及扩容操作
- 7.1 reserve
- 7.2 push_back和append
- 7.3 +=
- 7.4 resize
- 7.5 insert
- 7.6 erase
- 8. swap和find
- 9. 流插入<< 和 流提取>>重载
- 9.1 流插入<<重载
- 9.2 reverse修改
- 9.3 流提取>>重载
- 10. 写时拷贝(了解)
- 11. 源码展示
- string .h
- test.cpp
前言
在上两篇中,我们已经学习了string类的一个使用,并且做了一些相关的OJ练习,相信大家现在对于string的使用已经没什么问题了。
那我们这篇文章呢,就来带大家对string进行一个模拟实现,这篇文章过后,有些地方大家或许就可以理解的更深刻一点。
1. string的结构
那通过之前文章的学习我们已经对string有了一些了解了:
我们知道,string的底层其实就是一个支持动态增长的字符数组,就像我们数据结构里面学的动态的顺序表。
那确定了它的结构,接下来我们就开始模拟实现它。
我们来新建一个头文件string.h
,定义一个string类:
class string
{public:
//成员函数
private:char* _str;size_t _size;size_t _capacity;
};
string类的成员变量有3个,一个字符指针
_str
指向开辟的动态数组,_size
标识有效数据个数,_capacity
记录容量的大小(不包含'\0'
)。
相信经过之前数据结构的学习,大家很容易就能明白它们的含义。
但是:
我们现在是要自己实现一个string类,而标准库里面已经有string类了。
所以,为了避免冲突,我们可以定义一个命名空间,把我们自己实现的string放到我们自己的命名空间里面。
namespace yin
{class string{public:private:char* _str;size_t _size;size_t _capacity;};
}
命名空间的名字,大家可以自己起。
2. 构造、析构
接下来我们来模拟实现一个构造函数:
2.1 无参构造
首先我们提供一个无参的默认构造函数:
string():_str(nullptr),_size(0),_capacity(0)
{}
可以直接在初始化列表初始化。
2.2 带参构造
那我们再来写一个带参的构造函数:
string(const char* str):_str(str),_size(strlen(str)),_capacity(strlen(str)){}
2.3 问题发现及修改
这里是用一个常量字符串去初始化我们的string对象。
但是呢?
我们发现这里报错了,为什么?
【C++】深度剖析string类的底层结构及其模拟实现相关推荐
- 深度剖析E680G应用三.目录结构
深度剖析E680G应用三.目录结构 草木瓜 相关资源下载 http://play.younet.com/view.php?tid=18578 一.前言 本文主要介绍E680g系统应用相关的重要文件和目 ...
- 复旦邱锡鹏:深度剖析 ChatGPT 类大语言模型的关键技术
内容来源:ChatGPT 及大模型专题研讨会 分享嘉宾:复旦大学教授 邱锡鹏 分享主题:<对话式大型语言模型> 转载自CSDN稿件 求职/进NLP群->加入NLP交流群 ChapGP ...
- java字符串常量池长度_Java String类相关知识梳理(含字符串常量池(String Pool)知识)...
目录 1. String类是什么 1.1 定义 1.2 类结构 1.3 所在的包 2. String类的底层数据结构 3. 关于 intern() 方法(重点) 3.1 作用 3.2 字符串常量池(S ...
- 冰冰学习笔记:string类的简单模拟
欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...
- STL之string类:知其然,需知其所以然
目录 前言 一,构造及初始化 1.1constuct类函数 1.2构造函数及其模拟实现 1.3拷贝构造及其模拟实现 1.4赋值操作符 1.5string类的swap接口 二,迭代器 2.1初识迭代器即 ...
- 深度剖析E680I/G应用[转贴]
深度剖析E680G应用一 所谓的Loader 一.写在前面的话 E680G,已不能简单理解为手机,而是一台实实在在运行Linux操作系统的个人掌上电脑! 本文试图通过探讨E680G操作系统的架构,打造 ...
- 学习String类和日期Date类,看这一篇就够了
写在前面,Java基础系列文章都是作者基于b站尚硅谷的Java基础视频所做的笔记,没有时间的同学可以认真看看,如果有时间的同学,还是建议看看视频,毕竟笔记说到底还是自己的东西,每个人的习惯也是不一样的 ...
- 阿里最新面试必备项之Java的String类,持续更新中!
最新腾讯面试必备项之Java的String类,持续更新中! 1.1 String的特性 String类:代表字符串.Java程序中的所有字符串字面值(如"abc")都作为此类的实例 ...
- 《C++中STL引入和string类常用接口+自我实现-》
前言 在这篇博客里将详细说说C++中的STL,通过这篇我们可以学习到什么是STL,以及STL的六大组件,STL具有的缺陷,最后看看string类及面试会让模拟实现string类的操作. 文章目录 前言 ...
最新文章
- MAC复用和逻辑信道优先级
- ceph编译_Ceph编译:L版本及其之后的版本
- Precision和Recall
- oracle集群图例
- 开源一些Delphi系统:诗词成语字典
- 团队-科学技术器-模块测试过程
- 进程间同步(互斥量、信号量)
- win10子系统linux编译ffmpeg
- 在godaddy的空间上发布使用MySql 和 Entity Framework做的网站时遇到的Security Exception...
- DDD:四色原型、DDD、DCI之间的关系
- stylus 设置全局样式_在vue-cli 3中, 给stylus、sass样式传入共享的全局变量
- 部署ftp文件共享服务
- Macromedia Studio 8 简体中文正式版激活码
- 用友t3 服务器通讯协议,远程登陆用友t3服务器
- 自偏置电流镜设计实例
- 牛客网 月出皎兮,佼人僚兮。 树上启发式合并
- 在线标注协作服务Hypothes.is的简明教程
- 4x root 红米_红米Note 4X root教程_红米Note4X获取root权限的方法
- iOS混合开发之uni-app本地打包集成到iOS原生项目
- 从源数据库抽取数据到中间库
热门文章