STL和string实现

什么是****STL

STL(standard template libaray- 标准模板库 ) : 是 C++ 标准库的重要组成部分 ,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架 。

STL****的六大组件

标准库中的string类

1、string类的核心成员:

指向第一个有效字符地址的char*指针,有效字符个数,有效字符容量。

注意有效字符个数是不包含\0的,底层存储字符串所开辟的空间应该是有效字符容量+1,额外的一个是用来保存\0的。string之所以要在底层以c字符串的形式来维护,是方便将string转换成c字符串。当有效字符个数为0时,指针指向的是\0。

2、string类的核心方法:

构造函数:

string的默认构造函数,其底层字符串为空串

拷贝构造

c字符串构造函数

底层字符串为n个c字符

其他成员函数:

size

返回有效字符个数,不包括\0

resize

调整有效字符个数,如果n小于当前有效字符个数,那就直接截断,剩下的n个有效字符不变,有效字符容量不变。如果n大于当前有效字符个数,那就增加有效字符的个数,用c来填充新增加的字符,如果没有第二个参数那就用\0来填充

capacity

返回有效字符容量,注意有效字符容量+1==底层空间大小,会为\0留一个字节,所以该值返回的并不是底层空间大小

reserve

如果n<=当前有效字符容量,那该函数什么都不做,如果n大于当前有效字符容量,那就将有效字符容量增加到n,即底层空间扩大到n+1,扩容不影响有效字符

clear

调整有效字符个数为0,string的指针成员指向\0,有效字符容量不变

empty

如果当前有效字符个数为0,那就返回true,否则false

operator

返回指定下标对应的字符

operator+=

将string/常量字符串/字符 添加到string维护的字符串后面

insert

pos是有范围的,范围是0~size也就是说\0的位置也是可以插入的,如果不在这个范围,那就会报错越界,之后就是把string/c字符串/n个c字符 插入到指定位置,可能会有扩容发生

erase

pos是第一个要删除的字符的下标,pos的范围是0~size,如果pos为size就什么都不删除即可,len为要删除字符个数,如果该值大于pos以后的有效字符个数,那就只把pos以后的有效字符全删了即可

swap

交换两个string的成员变量即可

c_str

返回string的指针成员

find

从string维护的字符串的pos位置开始查找,找出第一个匹配目标 string/c字符串/字符 的位置,如果找不到就返回npos,npos是string类的一个静态成员变量,其类型为size_t,值为-1,相当于无穷大了

substr

截取一个子串,从pos下标开始,长度为len,假设第二个参数不给那默认是npos,如果长度len大于包含pos在内以后的有效字符个数,那就只返回包含pos在内以后的有效字符构造的string即可

静态成员变量:

npos表示一个非常大的数

string库中的全局函数:

这些函数都不是string类的成员函数,注意这些函数不是string类的静态成员函数,静态成员函数也是成员函数,但这些是全局函数,被std命名空间包裹

operator+

创建一个新的string,将第一个string和 string/c字符串/字符 都拼接到该新字符串后,然后返回新字符串

注意:operator+=是string的成员函数,该string是会被改变的,而且也不会有新string被创建

getline

从istream对象中读取一行数据到str中,终止符为\n

从istream对象中读取数据到str中,终止符自定义

string库的模拟实现

string模拟

相关推荐
破茧蝴蝶8 小时前
Python分布式爬虫完整教程
开发语言·python
狗凯之家源码网8 小时前
全新 PHP 轻量客服聊天室源码深度评测
开发语言·php·聊天室系统
远离UE48 小时前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
keyipatience8 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
一拳一个呆瓜9 小时前
【STL】文件系统导航
c++·stl
All for pursuit.9 小时前
【动态规划-21】312.戳气球
数据结构·c++·算法·leetcode·动态规划
栈帧之外9 小时前
【C++】STL之set
开发语言·c++
catchadmin10 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.4.1 发布,新增 MCP 支持
开发语言·php
zhanghaha131410 小时前
C++构造函数的一些其他应用(逐词逐句保姆讲解)
c++
jimy111 小时前
c++的 Type Traits (二、更详细版本)
开发语言·c++