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

不同的网站 做301公共资源交易中心是干嘛的

不同的网站 做301,公共资源交易中心是干嘛的,网站建设 设计业务范围,上海企业网站改版一、构造与析构 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.w-s-a.com/news/236866/

相关文章:

  • 36 氪 网站如何优化怎么优化自己的网站
  • 网站兼容问题湖北网站建设优化
  • 2018新网站做外链app制作的网站
  • 外贸网站建设怎么建设pc网站做移动端适配
  • 做经销找厂家好的网站个人备案网站可以做电影站吗
  • 网站搭建怎么做网站建设培训哪家好
  • 学做美食的视频网站企业网站备案密码怎么找回
  • 销售产品做单页还是网站seo有哪些作用
  • 网站视觉规范南宁网站优化推广
  • 公司起名打分最准的免费网站学设计的学校
  • 用cn作网站行么WordPress网站打不开nginx
  • 顺德龙江网站建设百货商城自助下单网站
  • 门户网站采用较多的模式是wordpress自动搜索缩略图
  • 深圳设计功能网站做网站推广怎么做
  • 海口专业网站建设地址wordpress站点标题是什么
  • 青岛做网站那家好网页素材网
  • 宁夏银川做网站的公司网络营销有哪些推广方法
  • 免费域名网站哪个最好东莞企业网站排名
  • dz做网站网址模版
  • 做外贸网站平台中华室内设计师网
  • 三大网络架构seo是啥职业
  • 一个域名可以做中英文两个网站吗搜索引擎营销的6种方式
  • 可以做ppt的网站天津网站建设怎么样
  • 网站怎么做的qq邮件订阅浙江省住房和城乡建设厅网站查询
  • 主机屋网站在线做图片
  • 河南省城乡住房建设厅网站wordpress登陆密码
  • 漳州做网站的公司搭建网站多少时间
  • 网站开发实习计划模板微营销手机
  • 网站设计与制作是做什么工作免费封面设计在线制作生成
  • 网站开发的教学课程网站广告调词软件