首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

string类的模拟实现

上一篇博客我们对string类函数进行了讲解,今天我们就对string类进行模拟实现,以便于大家更加深入地了解string类函数的应用 由于C++的库里面本身就有一个string类,所以我们为了不让编译器混淆视听...,我们可以首先将我们自己模拟实现的string类放入一个我们自己定义的命名空间内,这里我将命名空间命名为jh(本人名字首字母缩写): namespace jh { class string {...}; } 然后就是我们将string类的类的成员进行定义: string类实际就是字符串,它的几个成员有capacity(容量),size(字符拆串当前字符个数),str(字符串的指针) namespace...jh { class string { private: size_t _capacity; size_t _size; char* _str; }; } 下面我们就对string类的大部分经常使用的成员函数进行模拟实现...clear函数 直接将0位置置为\0,同时size置0 void clear() { _str[0] = '\0'; _size = 0; } 流插入和流提取 流插入和提取要放到模拟实现

11110

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

标准库中的string类在使用string类时,必须包含#include头文件以及using namespace std;auto和范围forauto关键字在这里补充2个C++11的小语法,方便我们后面的学习...string类的常用接口说明和使用在C++中,std::string 类是标准库的一部分,它提供了一个方便的接口来处理字符串。...string类的模拟实现经典的string类问题上面已经对string类进行了简单的介绍,大家只要能够正常使用即可。...在面试中,面试官总喜欢让 学生自己来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析 构函数。大家看下以下string类的实现是否有问题?​...在 std::string 的情况下,每次你进行拷贝构造或赋值操作时,都会执行深拷贝 stringl类模拟实现【代码】string.h​#define _CRT_SECURE_NO_WARNINGS 1

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

    string类的模拟实现

    错误一: 这里使用初始化列表进行构造函数的初始化,str本身是const类型,而初始化列表又将str赋值给了_str,所以此时就无法对str进行接下来string类的增删查改操作(只有查可以)。...综上我们可以看出string的构造不适合用初始化列表,因此我们改用普通构造函数,大不了我们定义的时候不初始化,其实对于string这个类是没有问题的。...string& string::operator=(string s) { swap(s); return *this; } 七、流插入和流提取操作符的重载 我们默认都是将这两个函数重载在类的外部...,所以不是类的成员函数,因为使用上的方便。...问题:流插入和流提取的重载必须要用友元函数吗 答案是不一定,因为是否用到友元,看我们是否调用到类的私有成员,如果没有,那就不用友元函数!

    7110

    提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

    Sinon.js是一个用来做独立测试和模拟的JavaScript库。它在单元测试的编写中通常用来模拟HTTP等相关请求。...它能满足日常的普通需求如utils工具集的测试,也能够配置Sinon.js来进行HTTP模拟测试。...; 在我的项目中,主要是使用Sinon.js来模拟HTTP请求。...在Sinon.js的文档中,有专门关于XMLHttpRequest对象的模拟的章节,在下一章中,我们将会针对项目中sinon.js的使用进行简单的介绍。...通过上面三类测试,我们基本能够覆盖现有项目中的所有代码。 同步函数测试 同步函数的测试过程是这几个中最简单的一部分,我们可以测试函数返回值,也能够测试传入的高阶函数。

    3.8K00

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

    前言 通过模拟实现string类的主要接口可以使我们对string类的理解更加透彻,深入理解内存管理,可以更好地理解字符串在内存中的存储方式,以及如何进行内存分配和释放,从而避免常见的内存泄漏和溢出问题...1、string类主要函数接口 模拟实现string类,主要是实现string类的构造、拷贝构造、运算符重载、析构等。...为了防止与标准库中string类命名冲突,我们在空间域yjz中来模拟实现我们的string类。...operator<<(ostream& out, const string& str); istream& operator>>(istream& in, string& str); } 2、string类的模拟实现...sub.reserve(len); for (size_t i = 0; i < len; i++) { sub += _str[pos + i]; } return sub; } 3、string类模拟实现完整代码

    10810

    【c++】string类模拟实现

    1.基本框架 我们stl库中的string类实在std命名空间的,这里我们自定义一个命名空间own,包含string类和简单的成员变量: namespace own { class string {...: --- private: char* _str; size_t _size; size_t _capacity; } } 2.构造函数与析构函数 我们上篇文章知道,string类有多种构造函数...<< s3[i] << " "; } cout << endl; } 迭代器iterator 我们上篇文章知道,迭代器是一个类似于指针却不是指针的东西,实际上迭代器十分复杂,但是我们简单的模拟实现就认为它是指针...这个函数非常有用,模拟实现如下: string substr(size_t pos=0, size_t len=npos) { string sub; if (len == npos || len..._capacity; return *this; } 开辟一块新空间,将原内容拷贝到新空间中并释放,然后更改指针指向与成员变量,最后返回*this operator==等几个比较函数 我们简单模拟两个

    7710

    【C++】模拟实现string类

    spm=1001.2014.3001.5502 而在本次项目中我们的目标是模拟实现一个string类: 该string包含四个成员变量,分别是: char*类型成员变量_str,用于存放指向字符串的指针...模拟实现的成员函数有: 构造函数,拷贝构造函数,赋值运算符重载和析构函数 c_str()函数 size()函数 reserve()函数 resize()函数 push_back()函数 append...实现string类成员函数 c_str()函数 c_str()函数的作用是返回string类c语言形式的字符串,即string类对象中的_str成员,该函数逻辑较为简单,但还有一些细节需要注意...,它实现起来非常简单,就是给类对象的首字符插入一个'\0',然后将类对象的_size置为0即可....<< endl; cout << st2 << endl; } int main() { test7(); return 0; } string.h文件 注:该文件中包含了string类的完整模拟实现代码

    21810

    数组类模板(类模拟实现静态数组)(简单版)

    介绍: 该篇文章是模仿静态数组的类,也就是简单数组,不可扩容 进阶版在这篇文章哦:数组类模板(进阶版)-CSDN博客 不过先看完本篇文章才对进阶文章理解哦 案例描述: 实现一个通用的数组类,要求如下...提供尾插法和尾刷法对数组中的数据进行增加和删除 ---- 增加删除元素函数 6.可以通过下标的方式访问数组中的元素 ---- 重载[] 7.可以获取数组中当前元素个数和数组的容量 ----- 访问函数 创建对应的类:...1.定义一个数组类 class myArr { public: private: }; 2.类中属性有:数组, 容量, 大小 该处要注意容量和大小不同: 容量:数组的可存放的元素个数 大小:...delete arr[];//错误写法 delete[] arr;//delete要提前知道释放的是数组 myCapacity = 0; mySize = 0; } 总代码: /*数组类模板...*/ //类模板案例 //案例描述:实现一个通用的数组类,要求如下: // //.可以对内置数据类型以及自定义数据类型的数据进行存储 ------ 将数组的数据类型设置为elemtype // .

    9510

    前端测试驱动开发模式(TDD)快速入门

    主要用来mock一些东西,比如可以用sinon mock一个假的函数,sinon也可以返回这个函数执行与否。...再执行以下安装语句: npm install sinon moncha chai sinon-chai --save-dev 复制代码 建立一个test文件夹,可以把写测试用例的Js放在这个文件夹中,...和 chai,要使用到sinon-chai const chai = require("chai") const sinon = require("sinon") const sinonChai =...模拟函数 如果需要模拟一个函数,可以用sinon去模拟,使用方法:sinon.fake(),并且课已通过这个sinon的called方法判断函数是否被执行。...let fn = sinon.fake() //生成一个模拟函数 assert(fn.called) //断言这个函数是否被执行 复制代码 小结 本文只是对Tdd的一个简单介绍,适用于快速入门。

    2.5K20

    CC++:string类的模拟实现

    string的文档网站 string类的介绍以及一些常见问题 String是一个管理字符数组的类,要求这个字符数组结尾用 ‘\0’ 标识 涉及的问题如下: 拷贝构造和赋值重载实现 深拷贝...只读函数 ,则要加 const 2 、如果是 只写函数 ,则不能加 const 3 、如果 既是可读又是可写的函数 ,则要重载两个版本的函数,即 const 版本与 非const 版本 String类的模拟实现...(定义在string.h中) 类的整体框架(简单的直接在框架实现了) #include #include //运用C++风格的头文件 #include <cassert...const string& s); //现代写法的赋值运算符重载(深拷贝问题) void swap(string& s); //自己写的swap去调用全局swap完成类成员变量的交换...capacity; //数组的容量(不包括'\0') size_t _size; //有效字符个数 static const size_t npos; //类外定义

    36420

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

    1、string类的模拟实现 1.1 经典的string类问题 前文已经对string类进行了简单的介绍,大家只要能够正常使用即可。...在面试中,面试官总喜欢让 应试者自己来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析 构函数。...说明:上述String类没有显式定义其拷贝构造函数与赋值运算符重载,此时编译器会自动生成默认 的,当用s1构造s2时,编译器会调用默认的拷贝构造。...1.3 深拷贝 如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显式给出,否则由编译器实现,内置类型会进行浅拷贝,程序会出错。一般情况都是按照深拷贝方式提供。...out; } istream& operator>>(istream& in, string& s) { s.clear();//先清理数据 const int N = 256;//模拟库中的

    5600

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

    Ⅰ. string类的介绍以及一些常见问题 string的文档网站 string 是一个管理字符数组的类,要求这个字符数组结尾用 \0 标识 模拟实现涉及的问题如下: 拷贝构造和赋值重载实现...如果是 只读函数 ,则要加 const 如果是 只写函数 ,则不能加 const 如果 既是可读又是可写的函数 ,则要重载两个版本的函数,即 const 版本与 非const 版本 Ⅱ. string类的模拟实现...类的整体框架(简单的直接在框架实现了) #include #include // 运用C++风格的头文件 #include using namespace...// 数组的容量(不包括'\0') size_t _size; // 有效字符个数 static const size_t npos; // 类外定义...= nullptr); // 开辟字符数组空间,然后对类内参数进行初始化 _size = strlen(str); _capacity = _size;

    5110

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

    现阶段我们无法完全透彻的理解迭代器,但是目前我们确实可以将其理解为指针,所以在模拟实现这里我们用typedef来将iterator定义为char型的指针类型。...对于静态成员变量,我们知道必须在类外定义,类内只是声明,定义时不加static关键字。...,定义必须在类外面,因为它属于整个类。...类外获得类内私有成员变量,一般有两种方法,一种是通过友元函数来进行解决,另一种是调用公有成员函数来访问私有成员变量。...getline和cin>>不同的地方在于,cin>>是以空格和\n作为分隔符,而getline是以\n作为分隔符的,所以在模拟实现的时候不能使用流提取来进行字符的读取,应该用istream类中的读取字符的成员函数

    63620

    【C++】string类 (模拟实现详解 上)

    我们不仅要会使用strng的接口,还要模拟实现,更深地理解strng的底层逻辑。这里我们最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数这些比较核心的接口。...1.准备工作         我们依旧采用声明和定义分离的方式模拟实现string,跟之前模拟实现Stack、顺序表那些是同样的操作,建三个文件,一个头文件string.h,两个源文件test.cpp和...string.h里面写一些会用到的头文件,一个string类,string类的成员变量都是老朋友了,size和capacity也是介绍过的,和模拟实现顺序表差不多的,前面的博文说过,string可以认为是...2.1 无参构造 还是写在string.h里的string类,作为string类的成员函数。...2.3 析构函数 写在string类里面。

    7910
    领券