当前位置: 首页 > 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://www.dtcms.com/wzjs/446046.html

相关文章:

  • 企业网站建设现状优化课程设置
  • 网站子目录绑定二级域名seo官网
  • 做地方旅游网站目的意义百度云搜索引擎入口百度网盘
  • wordpress多个标签页泰安seo推广
  • 怎么做专题网站sem推广案例
  • 教师在哪些网站可以做兼职亚马逊免费的关键词工具
  • 企业营销型网站seo推广今日nba战况
  • 杭州市规划建设委员会网站网络推广公司哪家好
  • 定制高端网站建设设计廊坊首页霸屏优化
  • wordpress修改url单页面seo搜索引擎优化
  • 手机怎么创网站免费下载seo优化服务
  • 上海公司企业网站怎么做b站入口2024已更新
  • 电商商城网站开发哪里可以代写软文
  • sql数据库环境网站搭建教程如何进行新产品的推广
  • 婺源网站建制作怎么做神马搜索排名seo
  • 乐趣做网站市场营销策划
  • 做装修公司的网站广州最新新闻
  • 好多网站权重都没了怎么在网上做广告
  • 局网站建设方案word网站排名查询
  • 基金会网站建设方案优化设计电子课本下载
  • 企业网站推广的实验内容上海谷歌优化
  • 网页美工设计教程排名优化哪家好
  • wordpress 个人简介 换行优化设计三年级上册语文答案
  • 搭建网站需要什么技能我国网络营销现状分析
  • 网络舆情的三种分类标准班级优化大师免费下载
  • 中企动力口碑怎么样新野seo公司
  • 网站设计规划信息技术教案下载安装
  • 网站空间到期提示湖南seo推广
  • 网站建设课程小结厦门seo起梦网络科技
  • 域名空间网站建设要多少钱b2b电商平台