首页
学习
活动
专区
圈层
工具
发布

库中是如何实现string类的?

个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 本篇简介:>:讲解如何模拟实现C++中的string类....申请一块为_capacity+1大小的空间.(+1是为了存储'\0') 将字符串中的值按字节拷贝至string类中的_str....C++迭代器是一个用于遍历容器(如vector、list、set等)中的元素的对象。...类的中的目标字串 字符串匹配算法,这里简化,直接调用库函数strstr,就不手撕算法了. // 返回子串s在string中第一次出现的位置 size_t find(const char* s, size_t...(*this == s); } 博主能力有限,无法严格按照库中的方法实现,比如采用内存池等技术,还有部分函数并未实现,模拟实现string的目的只是为了我们更好的理解string类,而不是真正让我们去写一个库函数

42010

【c++】string类---标准库(STL)中的string类

1.STL(标准库) 1.1 什么是STL STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架...为什么要学习string类 2.1 C语言中的字符串 C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 库函数,但是这些库函数与字符串是分离开的,不太符合...string类,很少有人去使用C库中的字符串操作函数 3....标准库中的string类 3.1 string类(了解) string类的文档介绍:https://cplusplus.com/reference/string/string/?...kw=string 字符串是表示字符序列的类 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性 string类是使用char(即作为它的字符类型

57110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    stl中String类的实现

    ,就加上这行代码,默认其为安全,注意:必须要置顶 #include"string.h" #includestring.h> //1.默认构造函数的实现--同时也是转换构造函数 //注意:如果声明的时候写了默认实参...,那么实现的时候就不能再次写一遍,不然会报错 String::String(const char* c) { size = strlen(c);//strlen不包含\0长度,sizeof包含\0...,而不能出现在友元函数的实现中 String operator+(const char* c, const String& s) { String w; int len = strlen(c) +...num个字符 //算法思想:原串分为前,中,后三段,中间是待删除的子串,前后连接 //步骤: //(1)在原串中删除子串 //(2)暂存删除后的原串的字符串 //(3)重新分配原串的字符串空间,将暂存的字符串复制到原串...0; } 这里函数只是列举了常见的一部分,实际的stl中的string的函数代码实现比这多的多 这里的模式匹配用的是最简单的朴素模式匹配算法,高级一点的可以用KMP算法,还可以把KMP算法next数组优化为

    63610

    string类的实现

    string类底层是一个字符串指针 1、类结构定义 #include #include using namespace std; class CMyString...否则如果函数的返回值是void,应用该赋值运算符将不能做连续赋值。假设有3个CMyString的对象:str1、str2和str3,在程序中语句str1=str2=str3将不能通过编译 。...(4)是否判断传入的参数和当前的实例(*this)是不是同一个实例。 避免自赋值,如果是同一个,则不进行赋值操作,直接返回。...如果事先不判断就进行赋值,那么在释放实例自身的内存的时候就会导致严重的问题:当*this和传入的参数是同一个实例时,那么一旦释放了自身的内存,传入的参数的内存也同时被释放了,因此再也找不到需要赋值的内容了...4、类成员函数实现 (1)普通构造函数 参数为 const 防止修改 strlen计算字符串长度没有吧'\0'算进去,所以要+1 CMyString::CMyString(const char* pDate

    59040

    对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?

    典型回答单独从性能角度,Netty在基础的NIO等类库之上进行了很多改进,例如:更加优雅的Reactor模式实现、灵活的线程模型、利用EventLoop等创新性的机制,可以非常高效地管理成百上千的Channel...总的来说,Netty并没有Java核心类库那些强烈的通用性、跨平台等各种负担,针对性能等特定目标以及Linux等特定环境,采取了一些极致的优化手段。...从设计思路和目的上,Netty与Java自身的NIO框架相比有哪些不同呢?我们知道Java的标准类库,由于其基础性、通用性的定位,往往过于关注技术模型上的抽象,而不是从一线应用开发者的角度去思考。...同时,Netty也提供了更加完善的Scatter/Gather机制实现。可以看到,Netty的能力范围大大超过了Java核心类库中的NIO等API,可以说它是一个从应用视角出发的产物。...最难能可贵的是,这一切并没有以可靠性、可扩展性为代价,反而将其大幅度提高。针对Netty的一些实现原理,很可能成为面试中的考点,例如:Reactor模式和Netty线程模型。

    11310

    string类的模拟实现

    错误一: 这里使用初始化列表进行构造函数的初始化,str本身是const类型,而初始化列表又将str赋值给了_str,所以此时就无法对str进行接下来string类的增删查改操作(只有查可以)。...改个顺序就能报错的大坑! 综上我们可以看出string的构造不适合用初始化列表,因此我们改用普通构造函数,大不了我们定义的时候不初始化,其实对于string这个类是没有问题的。...如何对空的string进行初始化?...典型错误: 这里在打印空字符串时,会报错,原因不是析构函数中delete/free对空指针的解引用,因为delete或者free函数内部会有对空指针的特殊检查,如果是空指针,delete和free不做处理...问题:流插入和流提取的重载必须要用友元函数吗 答案是不一定,因为是否用到友元,看我们是否调用到类的私有成员,如果没有,那就不用友元函数!

    20610

    C++初阶学习第六弹——探索STL奥秘(一)——标准库中的string类

    一、为什么有string类 在我们学习C语言的时候,有一个点是非常难处理的,那就是字符串,在我们对字符串访问,增删查改时都是非常不便的,所以我们封装了一个string类主要来处理字符串有关的问题...二、标准库中的string类 1、什么是string类 我们可以简单的把string类理解为变长的字符数组,我们可以对它进行增删查改等一系列操作,同时有一些列封装的接口函数提供给我们可以让我们直接使用...string类来做题了,这部分内容没啥重点讲解的,下面主要是直接给出代码示例 2.1 string类对象的构造 代码实例: #includestring> #include...//这个函数库中有各种各样的比较函数(==、>、如何实现这些函数,我们下章再讲 感谢各位大佬观看,创作不易,还请一键三连!!!

    17110

    string类的模拟实现

    上一篇博客我们对string类函数进行了讲解,今天我们就对string类进行模拟实现,以便于大家更加深入地了解string类函数的应用 由于C++的库里面本身就有一个string类,所以我们为了不让编译器混淆视听...,我们可以首先将我们自己模拟实现的string类放入一个我们自己定义的命名空间内,这里我将命名空间命名为jh(本人名字首字母缩写): namespace jh { class string {...}; } 然后就是我们将string类的类的成员进行定义: string类实际就是字符串,它的几个成员有capacity(容量),size(字符拆串当前字符个数),str(字符串的指针) namespace...类的大部分经常使用的成员函数进行模拟实现: 构造函数 首先定义一个构造函数,用于创建string类,这里大家用到了strlen和strcpy函数,所以要带上头文件string.h 还有一个需要注意的点...} 下标访问符号重载 下标访问在字符串中很常用,我们需要将其进行断言,如果pos大于size就毫无意义,需要注意的就是带上const,避免权限的放大 const char& operator[](size_t

    24310

    模拟实现C++中的string类(详细解析)

    学习C++,特别是C++中的STL部分,重点不是学习如何去使用STL,而是知道其底层原理是怎么样的,是怎么去实现的。因此,本篇文章带来的是对C++中的string的模拟实现。...废话不多说,让我们去了解string是如何实现的吧!...一.模拟实现构造函数 对于构造函数,在官方库中,C99有下面种类:  我们主要实现的是 string(); string(const char* s); string(const string&...而使用string类自带,已经定义好string类,并且是引用,不需要拷贝。所以我们来实现一下string类的swap。...还有就是,在C++的string类的库中,end的类型就是size_t的,我们既然要模拟实现string,我们就遵循规则。那么我们该如何取解决这个问题呢? 好办!

    1K20

    About Kotlin-Kotlin中的类1About Kotlin(1)

    About Kotlin(1) 因为是从Java的角度来学习Kotlin,在Java中,类作为第一等公民。故学习Kotlin,也先从其的类开始。...Kotlin中的类 普通的类 class Kotlin中没有添加修饰符直接以class开头的都是final类。final类的意义在于JVM可能存在的优化(常量和方法内联)和防止继承的滥用。...//Kotlin中所有类的父类是Any,类似于Object,不过Any不输于java.lang.Object,其有三个方法 //这里的operator是操作符重载,在Kotlin中的符号中会说明 public...Java 1.5 中加入了注解(annotation),其中最重要的一个是重写(override),表示这个方法是对超类中该方法的重写。...copy的实现就如下 fun copy(name:String=this.name,age:Int=this.age)=User(name,age) 确保有意义 为了确保数据类是一致的并且有意义的。

    1.6K30

    iOS一点点 - Swift 标准库中的 String

    所有我不能确定标准与否的术语翻译,均会在第一次出现时于括号内标注原文。 可能稍显啰嗦,我是希望能够借助尽量 细致、直观、全面、有理有据 的讲解,来提升自己的理解,相信也能帮到其他人。...我很喜欢读这种态度的文章,也希望自己的文章能有这种水平,希望你也喜欢。 正文 Swift 标准库提供了 String 文本类型,适用 Unicode 文本。...实际上不止是 “A” ,UTF-8 是兼容 ASCII 的,所有 ASCII 内的字符的在 UTF-8 和 ASCII 中的表示都一样,也即都是占一个字节 另一个有趣的细节。。。...前面我们说过 Swift 标准库提供的 String 用的是 Unicode ,现在再回去看前面那句报错 Subscript is unavailable: cannot subscript String...(姑且先这么说吧) String 中要定位、切分字符串,需要使用 String.Index 对象提供的一系列方法,它们会确保操作以字符为单位进行,不会出现让你把一个多字节字符砍成两半的问题: // successor

    1K20

    【C++】—掌握STL string类:string的模拟实现

    1.浅拷贝 什么是浅拷贝 浅拷贝也称之为位拷贝,编译器只是将对象中的值拷贝过来。...浅拷贝的实现 在c++中,如果没有显式定义拷贝构造函数或者赋值重载函数,编译器将自动生成默认的拷贝构造函数和赋值运算符重载函数,它们执行的是浅拷贝。...深拷贝的实现 在c++中,实现深拷贝通常涉及以下步骤: • 定义拷贝构造函数: 拷贝构造函数是一个特殊的构造函数,它接受一个同类型对象的引用作为参数。...通过实现拷贝构造函数,我们可以定义对象如何被复制。在拷贝构造函数中,我们需要为新对象分配内存,并复制原始对象的数据成员,包括那些指向动态分配内存的指针所引用的对象。...类的模拟实现 3.1 string的构造函数 string(const char* str) :_size(strlen(str)) { _capacity = _size; _str = new

    18210

    Kotlin中的常用类及其使用

    一、构造函数和初始化块 1.初始化块 2.主构造函数 3.次构造函数 4.他们之间的联系 二、属性 1.属性的声明 2.避免递归调用的幕后字段 三、常用的类 一、构造函数和初始化块 1.初始化块 代码的初始化工作由它负责...,在调用主构造函数之前执行,这部分理论上可以进行任何工作,但建议类的初始化赋值可以放在这,其余的最好由其他专门的地方处理,采用init关键字 init{ println("ww cool") }...2.主构造函数 主构造函数只能由一个,初始化块相当于放在主构造函数的无参函数中,按顺序执行初始化块,这一点和传统的面向对象编程中的主构造函数没有太大的区别。...(name:String){ constructor(name1:String,name2:String):this(name1){ //这部分规则和大多数面向对象的规则差不多...,所以不用这么担心 三、常用的类 抽象类 含有抽象方法的类称为抽象类,这一点和java里面很像 内部类 使用inner关键字,可以访问内部类外的属性 class outer{ val name

    1.5K20

    CC++:string类的模拟实现

    string的文档网站 string类的介绍以及一些常见问题 String是一个管理字符数组的类,要求这个字符数组结尾用 ‘\0’ 标识 涉及的问题如下: 拷贝构造和赋值重载实现 深拷贝...类的模拟实现 (定义在string.h中) 类的整体框架(简单的直接在框架实现了) #include #include //运用C++风格的头文件 #include...中第一次出现的位置 size_t find(char c, size_t pos = 0) const; // 返回子串s在string中第一次出现的位置..._str); //这里调用的是构造函数,而不是拷贝构造,如果调用拷贝构造,会死循环 this->swap(tmp); //具体看下面swap的实现,其实就是将成员函数交换了...& s) //调用std库中的swap进行交换 { ::swap(_str, s.

    46420

    【C++】string类的模拟实现

    { //std::string:标准中未规定需要\0作为字符串结尾。编译器在实现时既可以在结尾加\0,也可以不加。...string类的修改模块儿中的yyds函数,我们也只实现两个最常用的版本,参数分别为字符和字符串的版本。 在已实现push_back和append的情况下,我们直接进行函数复用即可。...erase的参数分别为删除的起始位置和需要删除的长度,库中实现时,如果你不传则默认使用缺省值npos,转换过来的意思就是,如果你不传删除长度,那就默认从删除的起始位置开始将后面的所有字符都进行删除。...getline和cin>>不同的地方在于,cin>>是以空格和\n作为分隔符,而getline是以\n作为分隔符的,所以在模拟实现的时候不能使用流提取来进行字符的读取,应该用istream类中的读取字符的成员函数...在实现内部,我们利用+=来进行string类对象的字符的尾插。

    76320
    领券