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

东海县城乡建设局网站wordpress 幻灯片

东海县城乡建设局网站,wordpress 幻灯片,化妆品网站建设实施方案,湖南响应式网站建设哪家有一、构造与析构 1.构造函数 构造函数需要尽可能将成员在初始化列表中初始化#xff0c;string类的成员这里自定义的和顺序表相似#xff0c;有_str , _size , _capacity , 以及一个静态成员 npos #xff0c;构造函数这里实现两种#xff0c;一种是传参为常量字符串的string类的成员这里自定义的和顺序表相似有_str , _size , _capacity , 以及一个静态成员 npos 构造函数这里实现两种一种是传参为常量字符串的一种是不进行传参直接实例化的这里可以使用缺省参数。 string(const char* str ):_size(strlen(str)){assert(str);_capacity _size 0 ? 3 : _size;//一开始时开多几个空间避免后续一些越界问题_str new char[_capacity1];//给多一个位置存放‘\0’strcpy(_str,str);} 2.拷贝构造 拷贝构造得注意参数给的时候要用引用传参不然会无限递归 string(const string s):_size(s._size),_capacity(s._capacity){_str new char[_capacity1];strcpy(_str,s._str);} 3.析构函数 正常用delete释放空间参数置空即可 ~string(){delete[] _str;_str nullptr;_size 0;_capacity 0;} 二、迭代器 1.正向迭代器 这里由于底层是顺序表因此迭代器的实现可以直接用指针需要注意的是在使用迭代器时有时候需要用到const修饰因此两种都要实现构成函数重载 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;} 2.反向迭代器 反向迭代器的实现还没学暂时先空着... 三、基本参数返回 关于成员变量我们需要提供一些接口去给用户合理的访问部分参数 const char* c_str()const{return _str;}size_t size()const{return _size;}size_t capacity()const{return _capacity;} 四、增删查改 1.增加字符 关于增加字符这里模拟实现几个基本的接口 1reserve 在模拟实现增加字符前要先考虑扩容的问题可以先实现reserve后续对其进行复用扩容 void reserve(size_t n)//扩容{if(n _capacity){char* tmp new char[n1];strcpy(tmp,_str);delete[] _str;_str tmp;_capacity n;}} 2push_back void push_back(char ch){if(_size 1 _capacity){reserve(_capacity*2);}_str[_size] ch;_size;_str[_size] \0;} 3append void append(const char* s){size_t len strlen(s);if(_size len _capacity){reserve(_sizelen);}strcpy(_str_size,s);_size len;} 4resize resize改变size的大小当size改变后比原有的capacity大时会进行扩容但不会进行缩容resize除了改变大小还会在其余的空间里填上指定字符要是不给定字符则默认为‘\0’ void resize(size_t n,char ch \0){if(n _size){reserve(n);while(_size n){_str[_size] ch;}_str[_size] \0;}else{_size n;_str[_size] \0;}} 5insert 从指定位置pos插入字符或者字符串这里需要构成函数重载思路是用一个end从后往前的将数据依次往后挪不要漏掉‘\0’然后空出来的位置再进行插入在插入字符串时挪动数据那一块的判断相对复杂需要画图去对边界条件进行判断需要注意的是end的类型要定义成size_t为了避免整形提升还需要注意end0时不会变成-1所以需要避免让end小于0的情况也就是头插的情况需要额外加判断或者采用从前面往后搬数据end指向后面 void insert(size_t pos,char ch){assert(pos _size);size_t end _size1;if(_size 1 _capacity){reserve(_capacity*2);}while(end pos){_str[end] _str[end-1];end--;}_str[pos] ch;_size;} void insert(size_t pos,const char* s){assert(pos _size);size_t len strlen(s);if(_size len _capacity){reserve(_sizelen);}size_t end _size len;while(end poslen-1){_str[end] _str[end - len];end--;}strncpy(_strpos,s,len);_sizelen;} 2.删除字符 1erase npos-1但npos是无符号整形因此是整形的最大值函数功能是从指定位置往后删指定长度的数据若是不给长度则默认全删了删到‘\0’停下。 void erase(size_t pos,size_t len npos){assert(pos _size);size_t end pos;size_t count 0;while(end _size len){end;len--;count;}while(end _size){_str[pos] _str[end];}_size - count;}2clear 清除所有数据 void clear(){_size 0;_str[_size] \0;} 3.查找字符 1find 查找函数这里模拟实现一个接口要支持查找字符或者字符串返回相对应的下标需要构成函数重载 查找字符 size_t find(char ch,size_t pos 0){for(size_t i pos;i_size;i){if(_str[i] ch){return i;}}return npos;} 查找字符串 size_t find(const char* s,size_t pos 0){char* pstr strstr(_strpos,s);if(pstr nullptr){return npos;}return pstr - s;} 4.修改字符 修改操作可以通过删除添加实现实际价值不大因此没有专门的接口实现这里实现一个常用的交换操作比起库里面直接使用的swap这里省去了拷贝构造的过程效率上会高很多 1swap void swap(string s){std::swap(_str,s._str);std::swap(_size,s._size);std::swap(_capacity,s._capacity);} 五、运算符重载 1.常用运算符 char operator[](size_t pos)const{assert(pos _size);return _str[pos];}string operator(char ch){push_back(ch);return *this;}string operator(const char* s){append(s);return *this;}string operator(const string s){if(this ! s){char* tmp new char[s._capacity1];strcpy(tmp,s._str);delete[] _str;_str tmp;_size s._size;_capacity s._capacity;}return *this;}2.比较运算符 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 || *this s;}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);} 3.流重载 1输出重载 ostream operator(ostream out,const string s){for(size_t i 0;is.size();i){out s[i];}return out;} 2输入重载 输入重载需要注意字符串的截取如果直接用in截取则无法截取到空格和回车因此用借用in的内部接口get()而且为了避免多次扩容减低效率可以先开一个字符串数组将每次在缓存区内获取的字符存到字符串数组中当字符串满了或者是获取完字符后再一次性输入到string变量中 istream operator(istream in,string s){s.clear();char ch in.get();char tmp[100];size_t i 0;while(ch ! ch !\n){if(i100){tmp[i] ch;ch in.get();tmp[i] \0;}else{stmp;i 0;}}if(i ! 0){stmp;}return in;} 总结 本篇模拟实现了string的部分常用的基本接口从原理上去学习了string类的相关知识
http://www.zqtcl.cn/news/972428/

相关文章:

  • 怎样做网站呢wordpress首页幻灯片尺寸
  • 青岛即墨网站网页设计营销型网站规划建设的七大要素
  • WordPress建站经验固原市住房和城乡建设厅网站
  • 可以查企业信息的软件wordpress换模板 seo
  • 网站广告怎么做wordpress封面图七牛
  • 设计师网站上海建设银行内部网站6
  • 网站接广告平台wordpress悬浮下拉
  • 国内网站做国外服务器网站建设的cms系统
  • 社交信息共享网站开发外包网站建设规划书的空间
  • 广告网站建设方案沂源网站建设
  • 城建局官网整站seo排名外包
  • 网站运营团队各岗位的职责是什么辽宁建设工程信息网官网首页官方
  • 怎样做网站框架图流媒体网站开发
  • cnzz统计代码放在网站网站建设一般要多钱
  • 长春火车站附近宾馆discuz论坛
  • 洛阳网站建设优惠公司做网站用虚拟主机还是服务器
  • 做自媒体网站需要注册什么公司六安app开发公司
  • 怎么用服务器ip做网站网站建设公司如何发展
  • 网站定位策划制作英文网站案例
  • 台州网站平面设计家装设计学校
  • 做PPT的辅助网站网站建设费属于宣传费吗
  • 湖南网站seo地址北京网站制作公司有哪些
  • 国内最佳网站建设设计emlog转移到wordpress
  • 网站优化怎么做效果才好网络营销工程师
  • 网站微信建设运维经验分享做个网站得多少钱
  • 网站开发设计制作合同静态营销网站代码
  • 中山自助建站系统网站 建设运行情况报告
  • 江西省城乡建设培训网官方网站什么叫静态网站
  • 用vue做网站的实例500个短视频素材免费
  • 免代码开发平台郴州做网站seo