网站备案升级如何做网站后台管理

bicheng/2026/1/22 21:16:57/文章来源:
网站备案升级,如何做网站后台管理,北京知名的网站建设公司排名,北京动力 网站建设本章主要说一下模拟实现string类的部分功能#xff0c;文章末附上所有代码。 目录 一、构造函数与析构函数 二、拷贝构造 三、c_str 四、【】和迭代器的遍历与访问 五、size 六、判断 七、reserve 八、push_back 九、resize 十、append 十一、 十二、insert 十…本章主要说一下模拟实现string类的部分功能文章末附上所有代码。 目录 一、构造函数与析构函数 二、拷贝构造 三、c_str 四、【】和迭代器的遍历与访问 五、size 六、判断 七、reserve 八、push_back 九、resize  十、append 十一、 十二、insert 十三、erase 十四、全部代码 一、构造函数与析构函数 首先构造函数就是利用之前所学的知识进行构造利用初始化列表进行计算一下所需要初始化的对象的大小也就是字符串的大小如下方代码所示size显示利用strlen计算一下所需要的大小然后容量这里是利用了三目运算符判断一下如果字符串为空就多创建几个如果字符串有大小就创建字符串大小的容量然后利用new进行创建这里需要把‘\0’算上所以就是容量1然后在利用strcpy拷贝过去析构函数就是利用delete[ ] 去释放所申请的空间并且置为空再把size和capacity置为0这个就是析构函数的写法那么实践一下是否成功测试结果如下图可以从图一看到构造函数很成功图二也可以看出析构函数也很成功。 class String { public:     String(const char* str )         :_size(strlen(str))     {         _capacity _size 0 ? 4 : _size;         _str new char[_capacity 1];         strcpy(_str, str);     }     ~String()     {         if (_str)         {             delete[] _str;             _str nullptr;             _size _capacity 0;         }     } private:     char* _str;     size_t_size;     size_t_capacity; }; void Test1() {     String s1;     String s2(Hello word!); } int main() {     Test1();     return 0; } 那么如果利用s2这个已有的字符串创建呢可以吗  如下图一可以看出在第一次析构函数调用成功后s3是正常析构可是s2的字符串就变成了乱码也就是这块地址被释放了如图二s2和s3所指向了同一个地址这个就是之前讲过的构成了拷贝构造所以编译器自动生成了一个拷贝构造但是这个只是一个值拷贝也就是浅拷贝所以就会出现指同一个空间的情况所以这里的解决方法就是如下方代码所是这样利用引用进行构造这个对象可以从下方图三看出地址不是一样这样就不会出现图一图二的错误了。 String(const String s)         :_size (s._size)         ,_capacity(s._capacity)     {         _str new char[_capacity 1];         strcpy(_str, s._str);     } 二、拷贝构造 在赋值的时候编译器所自动生成的拷贝就是浅拷贝所以这里需要自己写一个深拷贝要不然用s2给s1赋值都赋值不了实现代码如下测试如图发现是可以进行赋值的这里是先判断这两个地址是否相同不同的话进行拷贝首先是创建了一个行的地址里面存放的就是需要拷贝的字符串然后再把旧的字符串释放掉在指向这个地址size和capapcity都赋值成等于号的右值。 String operator(const String s)     {         if (this ! s)         {             char* tmp new char[s._capacity 1];             strcpy(tmp, s._str);             delete[] _str;             _str tmp;             _size s._size;             _capacity s._capacity;         }         return *this;     }  三、c_str 这个在官方的文档中的意思就是返回c形式的字符串因为使用流插入的话遇到\0并不会停止会全部打印结束所以这里就是需要这种函数来应付这种场合测试图和代码如下这里不需要改动字符串只是访问所以利用const修饰了一下下文这中只读的都会利用const去修饰。 const char* c_str()     {         return _str;     } 四、【】和迭代器的遍历与访问 这个就是相当于运算符重载利用【】去访问与遍历像数组那样访问与遍历上篇文章说了有三种访问与遍历的方式【】访问迭代器遍历和范围for的遍历[]的测试结果和代码如下。 const char operator[](size_t pos) const     {         assert(pos _size);         return _str[pos];     }  迭代器这里就下了两种的一种是可读可写的另一种就是只读的也就是const_iterator这种类型的普通的测试代码和结果如下。 iterator begin()     {         return _str;     }     iterator end()     {         return _str _size;     }  String::iterator it s2.begin();     while (it ! s2.end())     {         cout *it;         it;         *it a;     }     cout endl; 如果把s3转成const类型进行利用迭代器就会不能给改错误如下这时就可以利用const_iterator这个了实现代码如下。 const_iterator begin() const     {         return _str;     }     const_iterator end() const      {         return _str _size;     } for这个语法糖可以直接访问因为这个底层就是迭代器代码如下。 for (auto it3 : s2)     {         cout it3;     }     cout endl;  五、size 这个就是获取对象的size数据也就是大小代码和测试结果如下这里就可以利用之前获取的size数据直接返回。 size_t size() const     {         return _size;     }  六、判断 这个就是说下几个判断判断的是字符串的ASCLL码值直接利用strcmp进行直接复用判断使用代码和测试结果如下。 bool operator(const String s) const     {         return strcmp(_str, s._str) 0;     }     bool operator(const String s) const     {         return strcmp(_str, s._str) 0;     }     bool operator(const String s) const     {         return *this s || s *this;     }     bool operator(const String s) const     {         return !(*this s);     }     bool operator(const String s) const     {         return !(*this s);     }     bool operator!(const String s) const     {         return !(*this s);     } 七、reserve 这个函数的用法就是创建一个空间这个空间的大小可以进行指定也就是相当于扩容代码与测试结果如下s1也成功扩容成功他先是创建一个足够大的地址空间然后释放掉旧的在把临时拷贝的地址给原来的指针就OK了。 void reserve(size_t n)     {         char* tmp new char[n 1];         strcpy(tmp, _str);         delete[] _str;         _str tmp;         _capacity n;     } 八、push_back 这个我看到的时间就想起了之前学习数据结构的时候尾插这个尾插写的时候就是判断当size1大于capacity的时候就进行扩容我这里是扩容的2倍然后在进行拷贝数据在把size然后在把字符串尾写上\0如下图可以看出尾插是正常的代码如下。 void push_back(char ch)     {         if (_size 1 _capacity)         {             reserve(_capacity * 2);         }         _str[_size] ch;         _size;         _str[_size] \0;     } 九、resize  这个在cplusplus网站中的解释如下图可以看出他有两个参数第一个是长度第二个是字符就是进行扩容然后如果新的地址比旧的长的时候就把后面的字符尾插在字符后面实现代码如下下方图二就是测试的结果。 void resize(size_t n,char c)     {         char* tmp new char[n 1];         strcpy(tmp, _str);         while (n-_size-1)         {             tmp[_size] c;             _size;         }         delete[] _str;         _str tmp;         _capacity n;         _size;         _str[_size] \0;              }  十、append 这个就是和push_back的用法差不多但是是追加字符串这个用法就是直接计算字符串长度然后开辟空间在把字符串拷贝过去如下图所示。 void append(const char* str)     {         size_t len strlen(str);         if (_size len _capacity)         {             reserve(_size len);         }         strcpy(_str _size, str);         _size len;     } 十一、 这里是直接复用了push_back和append代码和测试如下。 String operator(char ch)     {         push_back(ch);         return *this;     }     String operator(const char* str)     {         append(str);         return *this;     }   十二、insert 这个insert就是在pos位置插入字符如下方代码就可以看出有_size可以找出字符串的尾然后--挪动数据找到pos的位置然后插入字符再把size对了不能忘了先判断扩容测试代码如下。 void insert(size_t pos, char ch)     {         assert(pos _size);         if (_size 1 _capacity)         {             reserve(2 * _capacity);         }         size_t end _size;         while (end pos)         {             _str[end 1] _str[end];             --end;         }         _str[pos] ch;         _size;     } 十三、erase 把pos位置数据删除这里也就是直接找到pos位置然后直接覆盖在--size就可以了测试代码和结果如下。 void erase(size_t pos)     {         assert(pos _size);         size_t end _size;         while (end pos)         {             --end;         }         while (end _size 1)         {             _str[end ] _str[end1];             end;         }         _size--;     }   十四、全部代码 #define _CRT_SECURE_NO_WARNINGS 1 #include iostream #include string #include assert.h using namespace std;class String { public:typedef char* iterator;typedef const char* const_iterator;String(const char* str ):_size(strlen(str)){_capacity _size 0 ? 4 : _size;_str new char[_capacity 1];strcpy(_str, str);}String(const String s):_size (s._size),_capacity(s._capacity){_str new char[_capacity 1];strcpy(_str, s._str);}String operator(const String s){if (this ! s){char* tmp new char[s._capacity 1];strcpy(tmp, s._str);delete[] _str;_str tmp;_size s._size;_capacity s._capacity;}return *this;}~String(){if (_str){delete[] _str;_str nullptr;_size _capacity 0;}}const char* c_str(){return _str;}const char operator[](size_t pos) const{assert(pos _size);return _str[pos];}iterator begin(){return _str;}iterator end(){return _str _size;}const_iterator begin() const{return _str;}const_iterator end() const {return _str _size;}size_t size() const{return _size;}bool operator(const String s) const{return strcmp(_str, s._str) 0;}bool operator(const String s) const{return strcmp(_str, s._str) 0;}bool operator(const String s) const{return *this s || s *this;}bool operator(const String s) const{return !(*this s);}bool operator(const String s) const{return !(*this s);}bool operator!(const String s) const{return !(*this s);}void reserve(size_t n){char* tmp new char[n 1];strcpy(tmp, _str);delete[] _str;_str tmp;_capacity n;}void resize(size_t n,char c){char* tmp new char[n 1];strcpy(tmp, _str);while (n-_size-1){tmp[_size] c;_size;}delete[] _str;_str tmp;_capacity n;_size;_str[_size] \0;}void push_back(char ch){if (_size 1 _capacity){reserve(_capacity * 2);}_str[_size] ch;_size;_str[_size] \0;}void append(const char* str){size_t len strlen(str);if (_size len _capacity){reserve(_size len);}strcpy(_str _size, str);_size len;}String operator(char ch){push_back(ch);return *this;}String operator(const char* str){append(str);return *this;}void insert(size_t pos, char ch){assert(pos _size);if (_size 1 _capacity){reserve(2 * _capacity);}size_t end _size;while (end pos){_str[end 1] _str[end];--end;}_str[pos] ch;_size;}void erase(size_t pos){assert(pos _size);size_t end _size;while (end pos){--end;}while (end _size 1){_str[end ] _str[end1];end;}_size--;} private:char* _str;size_t _size;size_t _capacity; };void Test1() {String s1;String s2(Hello word!);String const s3(s2);s1 s2;cout s2.c_str() endl;cout s2[4] endl;String::iterator it s2.begin();while (it ! s2.end()){*it a;cout *it;it;}cout endl;String::const_iterator it2 s3.begin();while (it2 ! s3.end()){cout *it2;it2;}cout endl;for (auto it3 : s2){cout it3;}cout endl;cout s2.size() endl;cout (s1 s2) endl;cout (s1 s2) endl;cout (s1 s2) endl;cout (s1 s2) endl;cout (s1 ! s2) endl;cout (s1 s2) endl;s1.reserve(30);s1.push_back(a);cout s1.c_str() endl;s1.resize(40, c);cout s1.c_str() endl;s2.append(dddd);cout s2.c_str() endl;s2 bbbbbbb;s2 c;cout s2.c_str() endl;s2.insert(2, q);cout s2.c_str() endl;s2.erase(2);cout s2.c_str() endl; }int main() {Test1();return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高端企业网站建设服务商qq音乐的网站建设信息

你们知道在W7中怎么设置鼠标的滚轮吗?下面是小编带来的关于win7如何设置鼠标滚轮的内容,欢迎阅读!Win7设置滚轮方法一:首先要在电脑的左下角点击开始按钮点击开始按钮以后出现上拉菜单,在菜单上面点击控制面板点击控制面板以后进入到控制面板…

简述网站建设流程网站开发项目规划书

hdvp:外部函数文件,函数定义在hdvp中可以传输给任何hdev使用,即可以发给别人使用。同时允许对hdvp进行加密

东莞网站建设工作室我要用新浪云做网站

引言 记录一次线上redis占用过大的排查过程,供后续参考 问题背景 测试同事突然反馈测试环境的web系统无法登陆,同时发现其他子系统也存在各类使用问题 排查过程 1、因为首先反馈的是测试环境系统无法登陆,于是首先去查看了登陆功能的报错…

龙岗网站-建设深圳信科工程建设室内涂料招投标网站

引言 分布式系统中的多个节点经常需要对共享资源进行并发访问,若没有有效的协调机制,可能会导致数据竞争、资源冲突等问题。分布式锁应运而生,它是一种保证在分布式环境中多个节点可以安全地访问共享资源的机制。而在Redis中,使用…

免费下载软件的网站有哪些wordpress s3插件

最近要做一个应用要实现本地化,因为使用的是xcode4,应用程序本地化的问题跟以前的版本还是有些不同,在网上找了些资料对于xcode4以上的版本资料还是相对较少,有些最后要通过手动创建文件,这样操作实在是太麻烦&#xf…

给别人做网站前要问些什么问题湛江市品牌网站建设怎么样

随着网络技术的发展,网络请求成为了许多应用的重要组成部分。然而,手动发送网络请求不仅效率低下,而且容易出错。为了解决这个问题,我们可以使用Python来实现网络请求的自动化。而HTTP代理可以帮助我们更好地控制和管理这些请求。…

购物网站,购物车界面如何做python网站建设代码

显卡 显卡代号前缀英伟达(NVIDIA)RTX系列实时光线追踪的基本原理DLSS技术的基本原理 显卡代号前缀 前缀品牌首次发布时间定位适用人群主流产品GTNVIDIA2006年较低性能办公用户、轻度游戏GT 1030GTXNVIDIA2008年高性能游戏玩家、图形设计师GTX 1080 TiRT…

vue大型网站怎么做路由什么软件可以攻击网站

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

网站建设广州网站建设南宁网站推广营销

1 为啥会有这个认证 你既然点进来了这个也就不重要了,重要的是怎么拿到他,以SAA-C03为例,从开始到结束我们一起来进行准备 2 考试卷 目前AWS的考试是要交钱的,正常情况下拿到5折劵很容易,比如你之前考过AWS的认证会给…

专业网站设计怎么做想做个小网站怎么做

Codeforces Round #697 (Div. 3)A~G解题报告 题 A Odd Divisor 题目介绍 解题思路 乍一想本题,感觉有点迷迷糊糊,但是证难则反,直接考虑没有奇数因子的情况,即 N 2i2^{i}2i,那么当N ! 2i2^i2i时,就有 奇数因子 注意…

深圳汇鑫科技网站建设有哪些网站是用php做的

一、问题 赋值表达式中可以分为左值和右值,那么什么是左值和右值?数组名做为左右值时又具有怎样的意义? 二、解答 在C语言中,左值和右值的概念对于理解赋值表达式以及程序的正确性非常重要: 1、左值 • 左值是一个…

网站图片装修的热切图怎么做网站微信支付怎么做的

直线度的检测不再局限于直尺法、重力法等人工检测方式,随着自动化的发展,直线度检测也更需要自动化方便快捷的检测仪器。为此,研发了在线直线度测量仪与离线直线度测量仪,根据不同的需要,选择合适的设备即可。 数据计…

基础建设的网站有哪些内容微信网页版登录手机版

本文详解C#串口类SerialPort 目录 一、概述 二、构造函数及重载 三、字段InfiniteTimeout 四、属性 五

网站建站好处最贵网站建设多少钱

1 当身为老师的爸爸上课时......▼2 气氛突然微妙......▼3 隔壁的一家人都馋哭了!▼4 结束疫情隔离的你▼5 WOW!AMAZING!▼6 女孩子喜欢帅哥是不分年龄的▼‍‍7 单身狗又做错了什么呢?▼你点的每个赞,我都认真当成了喜欢

唐山哪里有建设网站的怎么做品牌的官方网站

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。 概念性——数据库简介 介绍 数据对于当今许多应用程序和网站的运行至关重要。对热门视频的评论、多人游戏中分…

张家口网站建设智慧树网页设计与制作答案

1、七层负载均衡 1、说明 Nginx要实现七层负载均衡需要用到proxy_pass代理模块配置。Nginx默认安装支持这个模块,我们不需要再做任何处理。Nginx的负载均衡是在Nginx的反向代理基础上把用户的请求根据指定的算法分发到一组【upstream虚拟服务池】。 2、要用到的指…

虚拟机 wordpressseo咨询推广

1. 工厂模式介绍 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式有三种实现方式: 简单工厂模式工厂方法模式抽象工厂模式 2. 工厂方…

国家网站icp备案查询前端做的比较好的网站

python-pytorch使用日志 1. optimizer.zero_grad()和model.zero_grad()的区别2. cbow和skip-gram的训练数据格式3. 获取cbow和skip-gram训练后的中文词向量4. 获取到词向量后可以做什么5. 余弦相似度结果的解释 1. optimizer.zero_grad()和model.zero_grad()的区别 都是清空模…

济源网站建设电话jsp网站地图生成器

Redis的基本数据类型 redis的基本数据类型(value): string,普通字符串 hash(哈希),适合存储对象 list(列表),按照插入顺序排序,可以由重复的元素 set(无序集合),没有重复的元素 sorted set(有序集合)&…

企业网站策划怎么样部队网站建设建议

Android TV 上的谷歌语音助手是一个强大的工具,它允许用户通过语音命令来控制电视设备、搜索内容、管理智能家居设备等。下面是一些关于在 Android TV 上使用谷歌语音助手的实战建议: 启用和设置: 确保你的 Android TV 设备已经连接到了互联…