当前位置: 首页 > wzjs >正文

网站服务器权限免费的视频模板网站

网站服务器权限,免费的视频模板网站,在线设计平台优缺点,淘宝官网首页电脑版下载1. 什么是string类 在 C 中&#xff0c;string 是标准库&#xff08;<string>&#xff09;提供的类&#xff0c;用于表示和操作字符串。它是对传统 C 风格字符数组&#xff08;char[]&#xff09;的封装&#xff0c;提供了更安全、便捷的字符串操作功能&#xff0c;如动…

1. 什么是string类

在 C++ 中,string 是标准库(<string>)提供的类,用于表示和操作字符串。它是对传统 C 风格字符数组(char[])的封装,提供了更安全、便捷的字符串操作功能,如动态内存管理、长度自动跟踪和丰富的成员函数。

同时我们设计了一些接口函数来实现对他的调用。

PS:string在调用的时候只要加头文件含#include头文件以及using namespace std即可。

2. string本身代码实现

我们先把string本身实现一下,然后在它的代码上再添加接口函数。

我们来看下面这个代码,我们先把char*和const char*重命名为iterator和const_iterator是因为这样写更加规范(也显得更加专业)。

class string{public:typedef char* iterator;typedef const char* const_iterator;}

2.1 begin与end

首先我们在private创建了三个成员函数,_str:指向动态分配的字符数组(以 \0 结尾的 C 风格字符串),_size:当前字符串的有效字符长度(不包含终止符)和_capacity:当前分配的内存空间大小(包含终止符位置)。接下来我们实现了普通版本的begin,end和const版本的begin和end。这里我们要理解在const版本的begin和end后面的那个const是指向this指针的。

class string{public:typedef char* iterator;typedef const char* const_iterator;iterator begin(){return _str;}iterator end(){return _str + _size;}const_iterator begin() const{return _str;}const_iterator end() const{return _str + _size;}private:size_t _size;size_t _capacity;char* _str;};

2.2 构造函数

然后我们通过构造函数来实现对string的初始化,在这里我们写成const char* str = ""是为了允许无参调用构造函数,创建空字符串对象(因为不能说初始化为空就直接报错)。我们在capacity后面加2是为了给 \0 留位置同时防止越界访问,同时我们在这里是使用memcpy是为了直接复制指定字节数,这样不容易出现错误。注意我们把str给_str是为了实现初始化的时候赋值,比如说string a1("aaaaaaaaaa")这样。

class string{public:typedef char* iterator;typedef const char* const_iterator;iterator begin(){return _str;}iterator end(){return _str + _size;}const_iterator begin() const{return _str;}const_iterator end() const{return _str + _size;}string(const char* str = ""){_size = strlen(str);_capacity = _size;_str = new char[_capacity + 2];memcpy(_str, str, _size+1);}private:size_t _size;size_t _capacity;char* _str;};
}

PS:在这里_str是一个指向数组开头元素的指针。

2.3 拷贝构造函数

首先拷贝构造都是传引用返回(为了防止套娃,即递归触发拷贝构造函数)。然后我们给_str开传进来的s.capacity+2个空间,

class string{public:typedef char* iterator;typedef const char* const_iterator;iterator begin(){return _str;}iterator end(){return _str + _size;}const_iterator begin() const{return _str;}const_iterator end() const{return _str + _size;}string(const char* str = ""){_size = strlen(str);_capacity = _size;_str = new char[_capacity + 2];memcpy(_str, str, _size+1);}string(const string& s){_str = new char[s._capacity + 2];memcpy(_str, s._str,s._size+1);_size = s._size;_capacity = s._capacity;}private:size_t _size;size_t _capacity;char* _str;};
}

PS:各位有没有想过为什么在这里s就可以直接使用capacity呢,为什么在构造函数里面不可以这样,而是要通过strlen呢?简单来说就是因为str是外部传入的,而s是内部类对象所以可以互相访问。

2.4 析构函数

首先我们通过delete来对_str里面的内容进行清理,接着把_str数组置为空(这一步是为了防止出现野指针现象),最后我们把_size和_capacity都置为空。

class string{public:typedef char* iterator;typedef const char* const_iterator;iterator begin(){return _str;}iterator end(){return _str + _size;}const_iterator begin() const{return _str;}const_iterator end() const{return _str + _size;}string(const char* str = ""){_size = strlen(str);_capacity = _size;_str = new char[_capacity + 2];memcpy(_str, str, _size+1);}string(const string& s){_str = new char[s._capacity + 2];memcpy(_str, s._str,s._size+1);_size = s._size;_capacity = s._capacity;}~string(){delete[]_str;_str = nullptr;_size = _capacity = 0;}private:size_t _size;size_t _capacity;char* _str;};

文章转载自:

http://Aspj0ylH.txLxr.cn
http://nDeuDowQ.txLxr.cn
http://wQEYevKs.txLxr.cn
http://iHHlJx5V.txLxr.cn
http://ylYShdX1.txLxr.cn
http://TqamZsn8.txLxr.cn
http://xCzZgngF.txLxr.cn
http://J6RYMujF.txLxr.cn
http://ICGjS0zp.txLxr.cn
http://8p5hRP0D.txLxr.cn
http://2ZOq5JeT.txLxr.cn
http://Jn0VX0B3.txLxr.cn
http://PbQkCkYz.txLxr.cn
http://nv6D1sDB.txLxr.cn
http://nwmZJfoj.txLxr.cn
http://1F4mw5kg.txLxr.cn
http://qCBOWw2I.txLxr.cn
http://cRA7ATls.txLxr.cn
http://N6EXUozE.txLxr.cn
http://nLPyfzOX.txLxr.cn
http://3EmlNNqy.txLxr.cn
http://G6QGrpNY.txLxr.cn
http://6TgEHX1a.txLxr.cn
http://tlLyqtdN.txLxr.cn
http://leSepfUt.txLxr.cn
http://IrRAXfiM.txLxr.cn
http://Nc8lrEjN.txLxr.cn
http://6LXiYMgG.txLxr.cn
http://qvC0pqBE.txLxr.cn
http://YA6S7kaB.txLxr.cn
http://www.dtcms.com/wzjs/689292.html

相关文章:

  • 筛选选功能形网站建设wordpress子页面内容
  • 阿里云网站建设考试汕头百度seo找谁
  • 做了网站应该如何推广网站做xss过滤
  • 展馆网站建设工厂怎么做网站
  • 重庆seo整站优化服务沧州网络营销推广方案
  • 网易企业邮箱如何申请注册老网站做seo能不能重新注册
  • 电商网站建设优化高端网站设计建站
  • 网站建设都是模板网站地址栏图标怎么做
  • 如果创建网站最好用的crm
  • 网站建设公司重庆豆浆怎么制作教程
  • 北理离线《网站开发与应用》代理招商网免费加盟
  • 网站搭建收费参考开淘宝店做网站开发
  • 游戏网站开发难度做一个小程序需要多少钱?
  • 商洛网站建设公司电话建设摩托车125价格
  • 网站建设和原则母婴网站建设前期规划
  • 国内电商网站跳出率是多少wordpress xmlrpc攻击
  • 菏泽官方网站蚁坊软件舆情监测系统
  • 文章网站后台管理系统怎样建设一个好的网站
  • 新蔡县做网站收多少钱福州工程建设信息网站
  • 下载flash网站江西智能网站建设哪家好
  • 博客网站设计方案什么类型的网站开发比较困难
  • 网站公司网站定制广告设计月薪多少钱
  • 社交网站有哪些如何做wordpress编辑器段间距
  • 如何快速做单页面网站seo计费系统登录
  • 永州网站建设优化十大看免费行情的软件下载大全
  • 互联网网站建设公司两学一做 官方网站
  • 有没有专业做挂的网站盐城网站关键词优化
  • 开化网站建设东莞网站优化教程
  • 罗湖区网站建设多少钱手工制作小店铺
  • 端午节网站建设装修公司网站建设方案