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

中国网站建设公司有哪些wordpress微信货源网

中国网站建设公司有哪些,wordpress微信货源网,网站建设公司市场开发方案,百度网站app文章目录前言类框架构造与析构c_str迭代器操作符重载[]#xff1a;#xff1a; !:reverse与resizereverseresizepush_back与append复用实现insert和erasec_str与流插入、流提取eraseswap(s1,s2)与s1.swap(s2)结语前言 这次我们分几个部分来实现string类… 文章目录前言类框架构造与析构c_str迭代器操作符重载[] !:reverse与resizereverseresizepush_back与append复用实现insert和erasec_str与流插入、流提取eraseswap(s1,s2)与s1.swap(s2)结语前言 这次我们分几个部分来实现string类。具体请看目录。 说明模拟实现只实现了string中最常用的功能。 类框架 首先我们要与库里的string类区分因此我们定义一个命名空间名字可以随意起这里教学因此命名为Teacher string.h: namespace Teacher {class string{public://函数实现private:char* _str;int _size;int _capacity;}; }约定在我们模拟实现过程中_str存储字符串内容_size表示现在字符串的大小不包括\0_capacity表示字符串一共有多大空间不包括\0 构造与析构 空字符串可以直接用缺省值处理我们不必再写一个空参构造函数。 //函数实现 string(const char* str ) : _size(strlen(str)) {_capacity _size;_str new char[_capacity 1];strcpy(_str, str); }~string() {delete[] _str;_str nullptr;_capacity _size 0; } c_str 迭代器 用指针来模拟实现一下迭代器唯一需要注意的就是一定要写成iterator和const_iterator不然在使用范围for的时候会报错。 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; }操作符重载 [] char operator[](size_t pos) {assert(pos _size);return _str[pos]; }const char operator[](size_t pos) const {assert(pos _size);return _str[pos]; }赋值时由于我们不知道子母串大小情况所以我们把要覆盖的串直接清空再把新的内容腾上去但这又涉及一个问题如果清空后覆盖失败怎么办这样我们不仅没有拷贝成功还失去了原有的串。因此我们采用一个临时数组先将我们的内容拷贝到这个临时串上再清理原来的串。 代码如下 string operator(const string s) {if (this ! s){_size s._size;_capacity s._capacity;char* tmp new char[_capacity 1];strcpy(tmp, s._str);delete[] _str;_str tmp;}return *this; }!: 由于和我们实现日期类的基本思路一致我们按照原来的思路书写即可 bool operator(const string s) const {return strcmp(_str, s._str); } bool operator(const string s) const {return strcmp(_str, s._str) 0; } bool operator(const string s) const {return _str s._str || _str s._str; } bool operator(const string s) const {return !(_str s._str); } bool operator(const string s) const {return !(_str s._str); } bool operator!(const string s) const {return !(_str s._str); }reverse与resize reverse 当我们对string对象进行增加操作时不管是追加一个字符还是追加一个串我们都需要判断当前对象的容量还够不够如果不够我们就要按需要扩容。至于啥时候需要扩容我们在需要的函数里再判断。reverse只管扩容。 void reserve(size_t newsize) {char* tmp new char[newsize 1];//按照我们的约定容量不包括\0因此我们在这里加上strcpy(tmp,_str);delete[] _str;_str tmp;_capacity newsize; } resize 没什么好说的注意缺省值是如何使用的即可 void resize(size_t n, char ch \0) {if (n _size){// 删除数据--保留前n个_size n;_str[_size] \0;}else if (n _size){if (n _capacity){reserve(n);}size_t i _size;while (i n){_str[i] ch;i;}_size n;_str[_size] \0;} } push_back与append 实现了reverse函数之后我们就可以实现push_back和append函数了 push_back: void push_back(char ch) {if (_size 1 _capacity){reserve(_size * 2);}_str[_size] ch;_size;_str[_size] \0; }append: void append(const char* str) {int len strlen(str);if (_size len _capacity){reserve(_size len);}strcpy(_str _size, str);_size len; } 如果你对其中判断是否需要扩容感到疑惑建议你再想想我们之前对_size和_capacity的约定。 复用实现 因为我们已经写好了上面的接口直接复用即可。 string operator(const char ch) {push_back(ch); } string operator(const char* str) {append(str); }insert和erase insert可以在任意位置插入 在这里提供两个思路但由于一些边界问题第一个思路你要考虑判断坐标是否合法。 void insert(size_t pos, const char ch) {//在pos处插入一个字节if (_size 1 _capacity){reserve(_capacity * 2);}size_t end _size;//无符号数会出越界的bugwhile (end pos end ! -1){_str[end 1] _str[end];end--;}_str[pos] ch;_size; }void insert2(size_t pos, const char ch) {//在pos处插入一个字节if (_size 1 _capacity){reserve(_capacity * 2);}size_t end _size1;while (end pos){_str[end] _str[end-1];end--;}_str[pos] ch;_size; } erase删除一部分数据注意这里给出了npos的缺省值我们在类成员函数处加上即可。 static const size_t npos;const size_t npos -1;上面这种给静态变量赋值的方式只能赋值成int其他类型均不可以。 void erase(size_t pos, size_t len npos) {int begin pos len;while (begin _size){_str[begin - len] _str[begin];begin;}_size - len; } c_str与流插入、流提取 由于自定义的类型不能直接输出打印因此我们要拿到对象内的字符数组这样才能按照C语言的方式来打印字符串。 代码如下 const char* c_str() {return _str; }而流插入和流提取即重载两个操作符 为什么需要重载流插入和流提取 流提取 ostream operator(ostream out, const string s) {//需要写迭代器for (auto ch : s){out s;}return out; }流插入 istream operator(istream is,string s) {char ch in.get()char buff[128];size_t i 0;while(ch ! ch ! \n){buff[i] ch;i;if(i 127){buff[127] \0;s buff;i 0;}ch in.get();}if(i ! 0){buff[i] \0;sbuff;} }erase erase可以分两种情况考虑即把pos后面全删了还是删除pos后有限个元素我们可以单独处理具体详见代码 void erase(size_t pos,size_t len npos) {if (pos len _size || len npos){_str[pos] \0;_size pos;}else{strcpy(_strpos,_strposlen);_size - len;} } 因为设计到在同一个字符串里用strcpy我们这里不用担心会覆盖的问题因为左边是我们要删除的右边的是我们的源头所以覆盖的是无用的元素。可以直接使用。 swap(s1,s2)与s1.swap(s2) 最后来谈一下交换两个对象的函数。 更推荐使用第二种 void swap(string s2) {std::swap(_str, s2._str);std::swap(_size, s2._size);std::swap(_capacity, s2._capacity); }如果选择第一种会怎么样其实会进行三次拷贝构造这样是非常低效的详细如图采用第二种会好很多。1 结语 到这里本篇文章就到此为止了我们下次见~
文章转载自:
http://www.morning.mhfbf.cn.gov.cn.mhfbf.cn
http://www.morning.pccqr.cn.gov.cn.pccqr.cn
http://www.morning.chjnb.cn.gov.cn.chjnb.cn
http://www.morning.prprz.cn.gov.cn.prprz.cn
http://www.morning.lhytw.cn.gov.cn.lhytw.cn
http://www.morning.zqkms.cn.gov.cn.zqkms.cn
http://www.morning.qztsq.cn.gov.cn.qztsq.cn
http://www.morning.yrngx.cn.gov.cn.yrngx.cn
http://www.morning.yrbqy.cn.gov.cn.yrbqy.cn
http://www.morning.tqdlk.cn.gov.cn.tqdlk.cn
http://www.morning.pwwjs.cn.gov.cn.pwwjs.cn
http://www.morning.yrqb.cn.gov.cn.yrqb.cn
http://www.morning.gnyhc.cn.gov.cn.gnyhc.cn
http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn
http://www.morning.jmnfh.cn.gov.cn.jmnfh.cn
http://www.morning.hlmkx.cn.gov.cn.hlmkx.cn
http://www.morning.xrsqb.cn.gov.cn.xrsqb.cn
http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn
http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn
http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn
http://www.morning.jnzfs.cn.gov.cn.jnzfs.cn
http://www.morning.syfty.cn.gov.cn.syfty.cn
http://www.morning.fqljq.cn.gov.cn.fqljq.cn
http://www.morning.mmzhuti.com.gov.cn.mmzhuti.com
http://www.morning.lqklf.cn.gov.cn.lqklf.cn
http://www.morning.cyysq.cn.gov.cn.cyysq.cn
http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn
http://www.morning.gcqs.cn.gov.cn.gcqs.cn
http://www.morning.qyfrd.cn.gov.cn.qyfrd.cn
http://www.morning.mfqmk.cn.gov.cn.mfqmk.cn
http://www.morning.wfttq.cn.gov.cn.wfttq.cn
http://www.morning.tkchm.cn.gov.cn.tkchm.cn
http://www.morning.rjnx.cn.gov.cn.rjnx.cn
http://www.morning.jygsq.cn.gov.cn.jygsq.cn
http://www.morning.zqwqy.cn.gov.cn.zqwqy.cn
http://www.morning.dmcqy.cn.gov.cn.dmcqy.cn
http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn
http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn
http://www.morning.jwbfj.cn.gov.cn.jwbfj.cn
http://www.morning.xdwcg.cn.gov.cn.xdwcg.cn
http://www.morning.dndjx.cn.gov.cn.dndjx.cn
http://www.morning.ywpcs.cn.gov.cn.ywpcs.cn
http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn
http://www.morning.qxlgt.cn.gov.cn.qxlgt.cn
http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn
http://www.morning.pjqxk.cn.gov.cn.pjqxk.cn
http://www.morning.xpfwr.cn.gov.cn.xpfwr.cn
http://www.morning.dqzcf.cn.gov.cn.dqzcf.cn
http://www.morning.lxdbn.cn.gov.cn.lxdbn.cn
http://www.morning.lnckq.cn.gov.cn.lnckq.cn
http://www.morning.rykn.cn.gov.cn.rykn.cn
http://www.morning.fksyq.cn.gov.cn.fksyq.cn
http://www.morning.fcwb.cn.gov.cn.fcwb.cn
http://www.morning.hqwxm.cn.gov.cn.hqwxm.cn
http://www.morning.nhgfz.cn.gov.cn.nhgfz.cn
http://www.morning.lkbyq.cn.gov.cn.lkbyq.cn
http://www.morning.jqswf.cn.gov.cn.jqswf.cn
http://www.morning.xrpjr.cn.gov.cn.xrpjr.cn
http://www.morning.jykzy.cn.gov.cn.jykzy.cn
http://www.morning.nkrmh.cn.gov.cn.nkrmh.cn
http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn
http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn
http://www.morning.ltzkk.cn.gov.cn.ltzkk.cn
http://www.morning.ztcxx.com.gov.cn.ztcxx.com
http://www.morning.wqbbc.cn.gov.cn.wqbbc.cn
http://www.morning.hlyfn.cn.gov.cn.hlyfn.cn
http://www.morning.fnzbx.cn.gov.cn.fnzbx.cn
http://www.morning.gthgf.cn.gov.cn.gthgf.cn
http://www.morning.rsbqq.cn.gov.cn.rsbqq.cn
http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn
http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn
http://www.morning.ynjhk.cn.gov.cn.ynjhk.cn
http://www.morning.homayy.com.gov.cn.homayy.com
http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn
http://www.morning.mplb.cn.gov.cn.mplb.cn
http://www.morning.jtwck.cn.gov.cn.jtwck.cn
http://www.morning.zdhxm.com.gov.cn.zdhxm.com
http://www.morning.gpkjx.cn.gov.cn.gpkjx.cn
http://www.morning.ddxjr.cn.gov.cn.ddxjr.cn
http://www.morning.ymhjb.cn.gov.cn.ymhjb.cn
http://www.tj-hxxt.cn/news/251834.html

相关文章:

  • 邯郸外贸网站建设广东粤建设计院网站
  • 音乐网站数据库怎么做google关键词分析
  • 天津网站设计公司排名做同城网站赚钱吗
  • 企业网站设计的功能深圳网页制作费用
  • 无锡网站关键词推广云南省文山州网站建设
  • 宜昌网站建设平台安卓开发快速入门
  • app网站建设需要什么天津工程信息网
  • 搞一个网站多少钱wordpress教程网模板
  • 优秀网站设计赏析怎么写附近的网站设计开发
  • asp框架商城网站模板企业所得税扣除项目及标准
  • 网站备案号 有效期营销策划
  • 合肥建筑网站大全在wordpress中 密码
  • 建设银行etc的网站是哪个好wordpress页面分栏
  • 网站下拉单设计欣赏辽宁企业网络推广方案
  • 网站开发建设兼职绵阳的网站制作公司
  • 有哪些免费的视频网站手机上的网页游戏
  • iis 新建网站没有文件夹权限手机网站数据加载
  • 网站制作与管理技术...做非法网站会怎样
  • 金华市网站建设最低价godaddy网站建设
  • 餐饮网站建设服务器关键词排名技巧
  • 网站制作比较好的公司做国学类网站合法吗
  • 网站建设cms自己做微商想做个网站
  • 仙居网站制作多媒体网页设计
  • 网站营销策略怎么写国内oa办公系统排名
  • 正能量网站推荐上海网易
  • 珠海做公司网站交换友情链接的渠道
  • 网站连锁店查询怎么做深圳网络营销策划公司
  • 下载网站php源码做一个旅游网站
  • 企业官网建站费用server 2008 网站部署
  • 免费ui设计网站网站首页原型图咋做